<?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>192296</bug_id>
          
          <creation_ts>2018-12-02 21:29:19 -0800</creation_ts>
          <short_desc>Remove Network Capture</short_desc>
          <delta_ts>2018-12-03 00:23:07 -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>WebKit Misc.</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="Keith Rollin">krollin</reporter>
          <assigned_to name="Keith Rollin">krollin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>saam</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1484253</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2018-12-02 21:29:19 -0800</bug_when>
    <thetext>r209498 introduced an embedded record and replay facility for network resource loading. This facility was added in order to support a new implementation of the PLT and related performance tests. The PLT is currenty taking a different direction, and so this record/replace facility is no longer needed. Remove it as unused code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484254</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-12-02 21:29:56 -0800</bug_when>
    <thetext>&lt;rdar://problem/46408648&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484256</commentid>
    <comment_count>2</comment_count>
      <attachid>356354</attachid>
    <who name="Keith Rollin">krollin</who>
    <bug_when>2018-12-02 21:35:58 -0800</bug_when>
    <thetext>Created attachment 356354
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484283</commentid>
    <comment_count>3</comment_count>
      <attachid>356354</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-12-03 00:23:05 -0800</bug_when>
    <thetext>Comment on attachment 356354
Patch

Clearing flags on attachment: 356354

Committed r238792: &lt;https://trac.webkit.org/changeset/238792&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1484284</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-12-03 00:23:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>356354</attachid>
            <date>2018-12-02 21:35:58 -0800</date>
            <delta_ts>2018-12-03 00:23:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192296-20181202213557.patch</filename>
            <type>text/plain</type>
            <size>584583</size>
            <attacher name="Keith Rollin">krollin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4NzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDk3ODM3MjNhMjU3OGU1OWE4
YmFjNzE2YTFkNjdmN2QzY2UxNDg1ZTAuLjhkZDFiNGYzNmNjODU2NjQ2YWE0MGI0Yzk0NWE0NDA5
ZGM0Njg0NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTgtMTItMDIgIEtlaXRoIFJv
bGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBOZXR3b3JrIENhcHR1
cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MjI5
NgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDY0MDg2NDg+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgcjIwOTQ5OCBpbnRyb2R1Y2VkIGFuIGVtYmVk
ZGVkIHJlY29yZCBhbmQgcmVwbGF5IGZhY2lsaXR5IGZvciBuZXR3b3JrCisgICAgICAgIHJlc291
cmNlIGxvYWRpbmcuIFRoaXMgZmFjaWxpdHkgd2FzIGFkZGVkIGluIG9yZGVyIHRvIHN1cHBvcnQg
YSBuZXcKKyAgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhlIFBMVCBhbmQgcmVsYXRlZCBwZXJm
b3JtYW5jZSB0ZXN0cy4gVGhlIFBMVCBpcworICAgICAgICBjdXJyZW50eSB0YWtpbmcgYSBkaWZm
ZXJlbnQgZGlyZWN0aW9uLCBhbmQgc28gdGhpcyByZWNvcmQvcmVwbGFjZQorICAgICAgICBmYWNp
bGl0eSBpcyBubyBsb25nZXIgbmVlZGVkLiBSZW1vdmluZyBpdCBhcyB1bnVzZWQgY29kZS4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtMb2FkLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6Ok5ldHdvcmtMb2FkKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OnNldERlZmVyc0xvYWRpbmcpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6Y29udGludWVXaWxsU2VuZFJlcXVlc3QpOgorICAgICAg
ICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24pOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrTG9hZDo6bm90aWZ5RGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya0xvYWQ6OmRpZENvbXBsZXRlV2l0aEVycm9yKToKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya0xvYWQ6OmluaXRpYWxpemVGb3JSZWNvcmQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrTG9hZDo6aW5pdGlhbGl6ZUZvclJlcGxheSk6IERlbGV0ZWQuCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
Ojppbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6dGVybWluYXRlKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNz
Q3JlYXRpb25QYXJhbWV0ZXJzOjplbmNvZGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oOgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUV2ZW50Lmg6IFJl
bW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZUxv
Z2dpbmcuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdv
cmtDYXB0dXJlTWFuYWdlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
Y2FwdHVyZS9OZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZWNvcmRlci5o
OiBSZW1vdmVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1
cmVSZXBsYXllci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmg6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1Jl
cGxheS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3
b3JrRGF0YVRhc2tSZXBsYXkuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9j
YXB0dXJlL2pzb24uaHBwOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MpOgor
ICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNv
bmZpZy5oOgorCiAyMDE4LTEyLTAxICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgW1BTT05dIHByb2Nlc3Mtc3dhcHBpbmcgbWF5IG9jY3VyIGV2ZW4gdGhvdWdoIG9w
ZW5lciBoYXMgaGFuZGxlIHRvIG9wZW5lZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKaW5kZXggZjE2MTU0Mjcz
MjZkODhiYWFkYjVlOTNjMjNkY2E3NTQzYjE4MDRjNS4uNmRiMWU5MTE4YTY5OTRmOTQ1ZjM4ZjFh
ZjJkZmFjYTIwYjhjM2Q4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CkBAIC0xMiw3ICsxMiw2IEBAIHNl
dChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQ
cm9jZXNzL0luZGV4ZWREQiIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9TZXJ2
aWNlV29ya2VyIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL2NhY2hlIgotICAg
ICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUiCiAgICAgIiR7V0VCS0lUX0RJ
Un0vTmV0d29ya1Byb2Nlc3Mvd2F0Y2hvcyIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJv
Y2Vzcy93ZWJydGMiCiAgICAgIiR7V0VCS0lUX0RJUn0vUGxhdGZvcm0iCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmNwcCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQuY3BwCmluZGV4IGQyMWZkNDhmZGQyOTU4MDFk
YmQyMWJlOTdhZDA0NjQ0YzY4NzRmZGQuLjE5ZmU4NDkxNjM3OTNiYWZhOWYzZTA4YTkyMTdjZWYw
ZDVlMzhhMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0xvYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0xvYWQu
Y3BwCkBAIC00NiwxMCArNDYsNiBAQAogI2luY2x1ZGUgIk5ldHdvcmtTZXNzaW9uQ29jb2EuaCIK
ICNlbmRpZgogCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKLSNpbmNsdWRlICJOZXR3b3Jr
Q2FwdHVyZU1hbmFnZXIuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CkBAIC03Myw0MiArNjksOCBAQCBOZXR3b3JrTG9hZDo6TmV0d29y
a0xvYWQoTmV0d29ya0xvYWRDbGllbnQmIGNsaWVudCwgTmV0d29ya0xvYWRQYXJhbWV0ZXJzJiYg
cGFyYQogICAgICwgbV9sb2FkVGhyb3R0bGVMYXRlbmN5KG5ldHdvcmtTZXNzaW9uLmxvYWRUaHJv
dHRsZUxhdGVuY3koKSkKICAgICAsIG1fY3VycmVudFJlcXVlc3QobV9wYXJhbWV0ZXJzLnJlcXVl
c3QpCiB7Ci0jaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKLSAgICBzd2l0Y2ggKE5ldHdvcmtD
YXB0dXJlOjpNYW5hZ2VyOjpzaW5nbGV0b24oKS5tb2RlKCkpIHsKLSAgICBjYXNlIE5ldHdvcmtD
YXB0dXJlOjpNYW5hZ2VyOjpSZWNvcmRSZXBsYXlNb2RlOjpSZWNvcmQ6Ci0gICAgICAgIGluaXRp
YWxpemVGb3JSZWNvcmQobmV0d29ya1Nlc3Npb24pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IE5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpSZWNvcmRSZXBsYXlNb2RlOjpSZXBsYXk6Ci0gICAg
ICAgIGluaXRpYWxpemVGb3JSZXBsYXkobmV0d29ya1Nlc3Npb24pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIE5ldHdvcmtDYXB0dXJlOjpNYW5hZ2VyOjpSZWNvcmRSZXBsYXlNb2RlOjpEaXNh
YmxlZDoKLSAgICAgICAgaW5pdGlhbGl6ZShuZXR3b3JrU2Vzc2lvbik7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSNlbHNlCiAgICAgaW5pdGlhbGl6ZShuZXR3b3JrU2Vzc2lvbik7Ci0jZW5kaWYK
LX0KLQotI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCi12b2lkIE5ldHdvcmtMb2FkOjppbml0
aWFsaXplRm9yUmVjb3JkKE5ldHdvcmtTZXNzaW9uJiBuZXR3b3JrU2Vzc2lvbikKLXsKLSAgICBt
X3JlY29yZGVyID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI+KCk7
Ci0gICAgbV90YXNrID0gTmV0d29ya0RhdGFUYXNrOjpjcmVhdGUobmV0d29ya1Nlc3Npb24sICp0
aGlzLCBtX3BhcmFtZXRlcnMpOwotICAgIGlmICghbV9wYXJhbWV0ZXJzLmRlZmVyc0xvYWRpbmcp
IHsKLSAgICAgICAgbV90YXNrLT5yZXN1bWUoKTsKLSAgICAgICAgbV9yZWNvcmRlci0+cmVjb3Jk
UmVxdWVzdFNlbnQobV9wYXJhbWV0ZXJzLnJlcXVlc3QpOwotICAgIH0KLX0KLQotdm9pZCBOZXR3
b3JrTG9hZDo6aW5pdGlhbGl6ZUZvclJlcGxheShOZXR3b3JrU2Vzc2lvbiYgbmV0d29ya1Nlc3Np
b24pCi17Ci0gICAgbV9yZXBsYXllciA9IHN0ZDo6bWFrZV91bmlxdWU8TmV0d29ya0NhcHR1cmU6
OlJlcGxheWVyPigpOwotICAgIG1fdGFzayA9IG1fcmVwbGF5ZXItPnJlcGxheVJlc291cmNlKG5l
dHdvcmtTZXNzaW9uLCAqdGhpcywgbV9wYXJhbWV0ZXJzKTsKLSAgICBpZiAoIW1fcGFyYW1ldGVy
cy5kZWZlcnNMb2FkaW5nKQotICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOwogfQotI2VuZGlmCiAK
IHZvaWQgTmV0d29ya0xvYWQ6OmluaXRpYWxpemUoTmV0d29ya1Nlc3Npb24mIG5ldHdvcmtTZXNz
aW9uKQogewpAQCAtMTMxLDEzICs5Myw4IEBAIHZvaWQgTmV0d29ya0xvYWQ6OnNldERlZmVyc0xv
YWRpbmcoYm9vbCBkZWZlcnMpCiAgICAgaWYgKG1fdGFzaykgewogICAgICAgICBpZiAoZGVmZXJz
KQogICAgICAgICAgICAgbV90YXNrLT5zdXNwZW5kKCk7Ci0gICAgICAgIGVsc2UgeworICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBtX3Rhc2stPnJlc3VtZSgpOwotI2lmIEVOQUJMRShORVRXT1JL
X0NBUFRVUkUpCi0gICAgICAgICAgICBpZiAobV9yZWNvcmRlcikKLSAgICAgICAgICAgICAgICBt
X3JlY29yZGVyLT5yZWNvcmRSZXF1ZXN0U2VudChtX3BhcmFtZXRlcnMucmVxdWVzdCk7Ci0jZW5k
aWYKLSAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMTU2LDExICsxMTMsNiBAQCB2b2lkIE5ldHdv
cmtMb2FkOjpjb250aW51ZVdpbGxTZW5kUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
JiBuZXdSZXF1ZXN0KQogICAgIG1fY3VycmVudFJlcXVlc3QudXBkYXRlRnJvbURlbGVnYXRlUHJl
c2VydmluZ09sZFByb3BlcnRpZXMobmV3UmVxdWVzdCk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShO
RVRXT1JLX0NBUFRVUkUpCi0gICAgaWYgKG1fcmVjb3JkZXIpCi0gICAgICAgIG1fcmVjb3JkZXIt
PnJlY29yZFJlZGlyZWN0U2VudChuZXdSZXF1ZXN0KTsKLSNlbmRpZgotCiAgICAgYXV0byByZWRp
cmVjdENvbXBsZXRpb25IYW5kbGVyID0gc3RkOjpleGNoYW5nZShtX3JlZGlyZWN0Q29tcGxldGlv
bkhhbmRsZXIsIG51bGxwdHIpOwogICAgIEFTU0VSVChyZWRpcmVjdENvbXBsZXRpb25IYW5kbGVy
KTsKICAgICBpZiAobV9jdXJyZW50UmVxdWVzdC5pc051bGwoKSkgewpAQCAtMjMwLDExICsxODIs
NiBAQCB2b2lkIE5ldHdvcmtMb2FkOjp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihSZXNvdXJj
ZVJlc3BvbnNlJiYgcmVkaXJlY3RSZXNwb25zZQogICAgIHJlZGlyZWN0UmVzcG9uc2Uuc2V0U291
cmNlKFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6TmV0d29yayk7CiAgICAgbV9yZWRpcmVjdENv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcik7CiAKLSNpZiBFTkFC
TEUoTkVUV09SS19DQVBUVVJFKQotICAgIGlmIChtX3JlY29yZGVyKQotICAgICAgICBtX3JlY29y
ZGVyLT5yZWNvcmRSZWRpcmVjdFJlY2VpdmVkKHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOwot
I2VuZGlmCi0KICAgICBhdXRvIG9sZFJlcXVlc3QgPSBXVEZNb3ZlKG1fY3VycmVudFJlcXVlc3Qp
OwogICAgIHJlcXVlc3Quc2V0UmVxdWVzdGVyKG9sZFJlcXVlc3QucmVxdWVzdGVyKCkpOwogCkBA
IC0yODEsMTEgKzIyOCw2IEBAIHZvaWQgTmV0d29ya0xvYWQ6Om5vdGlmeURpZFJlY2VpdmVSZXNw
b25zZShSZXNvdXJjZVJlc3BvbnNlJiYgcmVzcG9uc2UsIFJlc3BvbnNlCiB7CiAgICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCi0gICAg
aWYgKG1fcmVjb3JkZXIpCi0gICAgICAgIG1fcmVjb3JkZXItPnJlY29yZFJlc3BvbnNlUmVjZWl2
ZWQocmVzcG9uc2UpOwotI2VuZGlmCi0KICAgICByZXNwb25zZS5zZXRTb3VyY2UoUmVzb3VyY2VS
ZXNwb25zZTo6U291cmNlOjpOZXR3b3JrKTsKICAgICBpZiAobV9wYXJhbWV0ZXJzLm5lZWRzQ2Vy
dGlmaWNhdGVJbmZvKQogICAgICAgICByZXNwb25zZS5pbmNsdWRlQ2VydGlmaWNhdGVJbmZvKCk7
CkBAIC0yOTcsMTEgKzIzOSw2IEBAIHZvaWQgTmV0d29ya0xvYWQ6OmRpZFJlY2VpdmVEYXRhKFJl
ZjxTaGFyZWRCdWZmZXI+JiYgYnVmZmVyKQogewogICAgIEFTU0VSVCghbV90aHJvdHRsZSk7CiAK
LSNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQotICAgIGlmIChtX3JlY29yZGVyKQotICAgICAg
ICBtX3JlY29yZGVyLT5yZWNvcmREYXRhUmVjZWl2ZWQoYnVmZmVyLmdldCgpKTsKLSNlbmRpZgot
CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHRoZSBlbmNvZGVkIGRhdGEgbGVuZ3RoLCBu
b3QgdGhlIGRlY29kZWQgZGF0YSBsZW5ndGguCiAgICAgYXV0byBzaXplID0gYnVmZmVyLT5zaXpl
KCk7CiAgICAgbV9jbGllbnQuZ2V0KCkuZGlkUmVjZWl2ZUJ1ZmZlcihXVEZNb3ZlKGJ1ZmZlciks
IHNpemUpOwpAQCAtMzExLDExICsyNDgsNiBAQCB2b2lkIE5ldHdvcmtMb2FkOjpkaWRDb21wbGV0
ZVdpdGhFcnJvcihjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvciwgY29uc3QgV2ViQ29yZQogewog
ICAgIEFTU0VSVCghbV90aHJvdHRsZSk7CiAKLSNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQot
ICAgIGlmIChtX3JlY29yZGVyKQotICAgICAgICBtX3JlY29yZGVyLT5yZWNvcmRGaW5pc2goZXJy
b3IpOwotI2VuZGlmCi0KICAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCiAgICAgICAgIG1fY2xpZW50
LmdldCgpLmRpZEZpbmlzaExvYWRpbmcobmV0d29ya0xvYWRNZXRyaWNzKTsKICAgICBlbHNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmggYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtMb2FkLmgKaW5kZXggOGFhYmZiZDY0
MzhiZjQzYjMxNjYwYjk1ODc2NjdkMjU4MGY1NDY5ZS4uYjUzZmRiZGNmODM1M2EzMDA4NDZiY2Y1
MzYxNDgyMjU4N2RjM2JmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrTG9hZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0xvYWQuaApAQCAtMzQsMTEgKzM0LDYgQEAKICNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotI2lmIEVOQUJMRShORVRXT1JLX0NBUFRV
UkUpCi0jaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZWNvcmRlci5oIgotI2luY2x1ZGUgIk5ldHdv
cmtDYXB0dXJlUmVwbGF5ZXIuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgTmV0d29ya0xvYWQgZmluYWwgOiBwcml2YXRlIE5ldHdvcmtEYXRhVGFza0NsaWVudApAQCAt
NzEsMTAgKzY2LDYgQEAgcHVibGljOgogICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0Owog
CiBwcml2YXRlOgotI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCi0gICAgdm9pZCBpbml0aWFs
aXplRm9yUmVjb3JkKE5ldHdvcmtTZXNzaW9uJik7Ci0gICAgdm9pZCBpbml0aWFsaXplRm9yUmVw
bGF5KE5ldHdvcmtTZXNzaW9uJik7Ci0jZW5kaWYKICAgICB2b2lkIGluaXRpYWxpemUoTmV0d29y
a1Nlc3Npb24mKTsKIAogICAgIC8vIE5ldHdvcmtEYXRhVGFza0NsaWVudApAQCAtMTAwLDExICs5
MSw2IEBAIHByaXZhdGU6CiAgICAgU2Vjb25kcyBtX2xvYWRUaHJvdHRsZUxhdGVuY3k7CiAKICAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgbV9jdXJyZW50UmVxdWVzdDsgLy8gVXBkYXRlZCBv
biByZWRpcmVjdHMuCi0KLSNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrQ2FwdHVyZTo6UmVjb3JkZXI+IG1fcmVjb3JkZXI7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPE5ldHdvcmtDYXB0dXJlOjpSZXBsYXllcj4gbV9yZXBsYXllcjsKLSNlbmRpZgog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IGFiZDQ3ODgxOGFkYTU0M2ZkYjUwMzlmOGEw
MzhmYjdmNGY1NzU5ODUuLjk3YjkxNzQwYjlhMWRiMDNjOTFjMjQ5NGU0YmE4NGU2YWIwOGU2M2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
CkBAIC05MywxMCArOTMsNiBAQAogI2luY2x1ZGUgIk5ldHdvcmtDYWNoZS5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtDYWNoZUNvZGVycy5oIgogCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKLSNp
bmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuaCIKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0o
Q09DT0EpCiAjaW5jbHVkZSAiTmV0d29ya1Nlc3Npb25Db2NvYS5oIgogI2VuZGlmCkBAIC0zMDAs
MTIgKzI5Niw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
cyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmCiAgICAgICAgIG1lbW9yeVByZXNz
dXJlSGFuZGxlci5pbnN0YWxsKCk7CiAgICAgfQogCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVS
RSkKLSAgICBOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlcjo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZSgK
LSAgICAgICAgcGFyYW1ldGVycy5yZWNvcmRSZXBsYXlNb2RlLAotICAgICAgICBwYXJhbWV0ZXJz
LnJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24pOwotI2VuZGlmCi0KICAgICBtX2Rpc2tDYWNoZUlz
RGlzYWJsZWRGb3JUZXN0aW5nID0gcGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29ya1Nl
c3Npb247CiAKICAgICBtX2Rpc2tDYWNoZVNpemVPdmVycmlkZSA9IHBhcmFtZXRlcnMuZGlza0Nh
Y2hlU2l6ZU92ZXJyaWRlOwpAQCAtOTI5LDEwICs5MTksNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNz
Ojpsb2dEaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSh1aW50NjRfdCB3ZWJQYWdlSUQsIGNvbnN0
IFN0cgogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjp0ZXJtaW5hdGUoKQogewotI2lmIEVOQUJMRShO
RVRXT1JLX0NBUFRVUkUpCi0gICAgTmV0d29ya0NhcHR1cmU6Ok1hbmFnZXI6OnNpbmdsZXRvbigp
LnRlcm1pbmF0ZSgpOwotI2VuZGlmCi0KICAgICBwbGF0Zm9ybVRlcm1pbmF0ZSgpOwogICAgIENo
aWxkUHJvY2Vzczo6dGVybWluYXRlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwCmluZGV4IDRlYjIwMzdkZGM0MDQzY2JhMWJkZTY5OTM0NWY0NmIwNWU3NWYxZWEuLjcyYjM5
Y2VmOWU5YmRlZDQ2ODllNDAzNmFjZDU4YjYxY2QwNGZkMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMuY3BwCkBAIC05MCwxMCArOTAsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogI2Vs
aWYgVVNFKENVUkwpCiAgICAgZW5jb2RlciA8PCBjb29raWVQZXJzaXN0ZW50U3RvcmFnZUZpbGU7
CiAjZW5kaWYKLSNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQotICAgIGVuY29kZXIgPDwgcmVj
b3JkUmVwbGF5TW9kZTsKLSAgICBlbmNvZGVyIDw8IHJlY29yZFJlcGxheUNhY2hlTG9jYXRpb247
Ci0jZW5kaWYKIAogICAgIGVuY29kZXIgPDwgdXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZTsK
ICAgICBlbmNvZGVyIDw8IHVybFNjaGVtZXNSZWdpc3RlcmVkQXNCeXBhc3NpbmdDb250ZW50U2Vj
dXJpdHlQb2xpY3k7CkBAIC0yMjQsMTMgKzIyMCw2IEBAIGJvb2wgTmV0d29ya1Byb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnM6OmRlY29kZShJUEM6OkRlY29kZXImIGRlY29kZXIsIE5ldHdvcmtQcm9j
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FQ
VFVSRSkKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5yZWNvcmRSZXBsYXlNb2RlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnJl
Y29yZFJlcGxheUNhY2hlTG9jYXRpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LQogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LnVybFNjaGVtZXNSZWdpc3RlcmVkQXNT
ZWN1cmUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGlj
eSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggYWMwNDI0NTJhMjYyOTJkZDgx
YjRhYTlmOTUzNzM1OTYxNTEwNjNmOS4uZmFjN2M1MmQ1MzFhNzk1MWQ3MmQ3ZjRkY2M3Yzg0NWZl
NWFlZGUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaApAQCAtMTA2LDExICsxMDYs
NiBAQCBzdHJ1Y3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMgewogICAgIFN0cmlu
ZyBjb29raWVQZXJzaXN0ZW50U3RvcmFnZUZpbGU7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShORVRX
T1JLX0NBUFRVUkUpCi0gICAgU3RyaW5nIHJlY29yZFJlcGxheU1vZGU7Ci0gICAgU3RyaW5nIHJl
Y29yZFJlcGxheUNhY2hlTG9jYXRpb247Ci0jZW5kaWYKLQogICAgIFZlY3RvcjxTdHJpbmc+IHVy
bFNjaGVtZXNSZWdpc3RlcmVkQXNTZWN1cmU7CiAgICAgVmVjdG9yPFN0cmluZz4gdXJsU2NoZW1l
c1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeTsKICAgICBWZWN0b3I8
U3RyaW5nPiB1cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVFdmVudC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYzBmYjExMWJkNWJkNjExNDg5OThi
NGI5N2E3ZjBmM2UzY2ExNTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0
dXJlRXZlbnQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTA2ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVFdmVudC5oIgot
Ci0jaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKLQotI2RlZmluZSBKU09OX05PRVhDRVBUSU9O
IDEKLSN1bmRlZiBfX0VYQ0VQVElPTlMKLQotI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTG9nZ2lu
Zy5oIgotI2luY2x1ZGUgImpzb24uaHBwIgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VFcnJv
ci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNp
bmNsdWRlIDx3dGYvQnJpZ2FuZC5oPgotI2luY2x1ZGUgPHd0Zi9VUkxQYXJzZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2Ug
TmV0d29ya0NhcHR1cmUgewotCi1jb25zdCBjaGFyIFJlcXVlc3RTZW50RXZlbnQ6OnR5cGVOYW1l
W10gPSAiUmVxdWVzdFNlbnRFdmVudCI7Ci1jb25zdCBjaGFyIFJlc3BvbnNlUmVjZWl2ZWRFdmVu
dDo6dHlwZU5hbWVbXSA9ICJSZXNwb25zZVJlY2VpdmVkRXZlbnQiOwotY29uc3QgY2hhciBSZWRp
cmVjdFJlY2VpdmVkRXZlbnQ6OnR5cGVOYW1lW10gPSAiUmVkaXJlY3RSZWNlaXZlZEV2ZW50IjsK
LWNvbnN0IGNoYXIgUmVkaXJlY3RTZW50RXZlbnQ6OnR5cGVOYW1lW10gPSAiUmVkaXJlY3RTZW50
RXZlbnQiOwotY29uc3QgY2hhciBEYXRhUmVjZWl2ZWRFdmVudDo6dHlwZU5hbWVbXSA9ICJEYXRh
UmVjZWl2ZWRFdmVudCI7Ci1jb25zdCBjaGFyIEZpbmlzaGVkRXZlbnQ6OnR5cGVOYW1lW10gPSAi
RmluaXNoZWRFdmVudCI7Ci0KLXN0YXRpYyBIZWFkZXJzIGNvcHlIZWFkZXJzKGNvbnN0IFdlYkNv
cmU6OkhUVFBIZWFkZXJNYXAmIGh0dHBIZWFkZXJzKQotewotICAgIEhlYWRlcnMgaGVhZGVyczsK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGhlYWRlciA6IGh0dHBIZWFkZXJzKQotICAgICAgICBoZWFk
ZXJzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpKTsKLSAg
ICByZXR1cm4gaGVhZGVyczsKLX0KLQotLy8gLS0tLS0tLS0tLQotCi1SZXF1ZXN0OjpSZXF1ZXN0
KFN0cmluZyYmIHVybCwgU3RyaW5nJiYgcmVmZXJyZXIsIGludCBwb2xpY3ksIFN0cmluZyYmIG1l
dGhvZCwgSGVhZGVycyYmIGhlYWRlcnMpCi0gICAgOiB1cmwoV1RGTW92ZSh1cmwpKQotICAgICwg
cmVmZXJyZXIoV1RGTW92ZShyZWZlcnJlcikpCi0gICAgLCBwb2xpY3koV1RGTW92ZShwb2xpY3kp
KQotICAgICwgbWV0aG9kKFdURk1vdmUobWV0aG9kKSkKLSAgICAsIGhlYWRlcnMoV1RGTW92ZSho
ZWFkZXJzKSkKLXsKLX0KLQotUmVxdWVzdDo6UmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCi0gICAgOiB1cmwocmVxdWVzdC51cmwoKS5zdHJpbmcoKSkKLSAg
ICAsIHJlZmVycmVyKHJlcXVlc3QuaHR0cFJlZmVycmVyKCkpCi0gICAgLCBwb2xpY3koc3RhdGlj
X2Nhc3Q8aW50PihyZXF1ZXN0LmNhY2hlUG9saWN5KCkpKQotICAgICwgbWV0aG9kKHJlcXVlc3Qu
aHR0cE1ldGhvZCgpKQotICAgICwgaGVhZGVycyhjb3B5SGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFk
ZXJGaWVsZHMoKSkpCi17Ci19Ci0KLVJlcXVlc3Q6Om9wZXJhdG9yIFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCgpIGNvbnN0Ci17Ci0gICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qo
VVJMKHsgfSwgdXJsKSwgcmVmZXJyZXIsIHN0YXRpY19jYXN0PFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdENhY2hlUG9saWN5Pihwb2xpY3kpKTsKLSAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QobWV0
aG9kKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVyIDogaGVhZGVycykKLSAgICAgICAg
cmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGQoaGVhZGVyLmZpcnN0LCBoZWFkZXIuc2Vjb25kKTsK
LQotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi0vLyAtLS0tLS0tLS0tCi0KLVJlc3BvbnNlOjpS
ZXNwb25zZShTdHJpbmcmJiB1cmwsIFN0cmluZyYmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0
ZWRMZW5ndGgsIFN0cmluZyYmIHRleHRFbmNvZGluZ05hbWUsIFN0cmluZyYmIHZlcnNpb24sIGlu
dCBzdGF0dXMsIFN0cmluZyYmIHJlYXNvbiwgSGVhZGVycyYmIGhlYWRlcnMpCi0gICAgOiB1cmwo
V1RGTW92ZSh1cmwpKQotICAgICwgbWltZVR5cGUoV1RGTW92ZShtaW1lVHlwZSkpCi0gICAgLCBl
eHBlY3RlZExlbmd0aChXVEZNb3ZlKGV4cGVjdGVkTGVuZ3RoKSkKLSAgICAsIHRleHRFbmNvZGlu
Z05hbWUoV1RGTW92ZSh0ZXh0RW5jb2RpbmdOYW1lKSkKLSAgICAsIHN0YXR1cyhXVEZNb3ZlKHN0
YXR1cykpCi0gICAgLCByZWFzb24oV1RGTW92ZShyZWFzb24pKQotICAgICwgaGVhZGVycyhXVEZN
b3ZlKGhlYWRlcnMpKQotewotfQotCi1SZXNwb25zZTo6UmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi0gICAgOiB1cmwocmVzcG9uc2UudXJsKCkuc3Ry
aW5nKCkpCi0gICAgLCBtaW1lVHlwZShyZXNwb25zZS5taW1lVHlwZSgpKQotICAgICwgZXhwZWN0
ZWRMZW5ndGgocmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkpCi0gICAgLCB0ZXh0RW5j
b2RpbmdOYW1lKHJlc3BvbnNlLnRleHRFbmNvZGluZ05hbWUoKSkKLSAgICAsIHZlcnNpb24ocmVz
cG9uc2UuaHR0cFZlcnNpb24oKSkKLSAgICAsIHN0YXR1cyhyZXNwb25zZS5odHRwU3RhdHVzQ29k
ZSgpKQotICAgICwgcmVhc29uKHJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpCi0gICAgLCBoZWFk
ZXJzKGNvcHlIZWFkZXJzKHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkpCi17Ci19Ci0KLVJl
c3BvbnNlOjpvcGVyYXRvciBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlKCkgY29uc3QKLXsKLSAg
ICBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlKFVSTCh7IH0sIHVybCksIG1pbWVU
eXBlLCBleHBlY3RlZExlbmd0aCwgdGV4dEVuY29kaW5nTmFtZSk7Ci0gICAgcmVzcG9uc2Uuc2V0
SFRUUFZlcnNpb24odmVyc2lvbik7Ci0gICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoc3Rh
dHVzKTsKLSAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChyZWFzb24pOwotCi0gICAgZm9y
IChjb25zdCBhdXRvJiBoZWFkZXIgOiBoZWFkZXJzKQotICAgICAgICByZXNwb25zZS5zZXRIVFRQ
SGVhZGVyRmllbGQoaGVhZGVyLmZpcnN0LCBoZWFkZXIuc2Vjb25kKTsKLQotICAgIHJldHVybiBy
ZXNwb25zZTsKLX0KLQotLy8gLS0tLS0tLS0tLQotCi1FcnJvcjo6RXJyb3IoU3RyaW5nJiYgZG9t
YWluLCBTdHJpbmcmJiBmYWlsaW5nVVJMLCBTdHJpbmcmJiBsb2NhbGl6ZWREZXNjcmlwdGlvbiwg
aW50IGVycm9yQ29kZSwgaW50IHR5cGUpCi0gICAgOiBkb21haW4oV1RGTW92ZShkb21haW4pKQot
ICAgICwgZmFpbGluZ1VSTChXVEZNb3ZlKGZhaWxpbmdVUkwpKQotICAgICwgbG9jYWxpemVkRGVz
Y3JpcHRpb24oV1RGTW92ZShsb2NhbGl6ZWREZXNjcmlwdGlvbikpCi0gICAgLCBlcnJvckNvZGUo
V1RGTW92ZShlcnJvckNvZGUpKQotICAgICwgdHlwZShXVEZNb3ZlKHR5cGUpKQotewotfQotCi1F
cnJvcjo6RXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3IpCi0gICAgOiBk
b21haW4oZXJyb3IuZG9tYWluKCkpCi0gICAgLCBmYWlsaW5nVVJMKGVycm9yLmZhaWxpbmdVUkwo
KS5zdHJpbmcoKSkKLSAgICAsIGxvY2FsaXplZERlc2NyaXB0aW9uKGVycm9yLmxvY2FsaXplZERl
c2NyaXB0aW9uKCkpCi0gICAgLCBlcnJvckNvZGUoZXJyb3IuZXJyb3JDb2RlKCkpCi0gICAgLCB0
eXBlKHN0YXRpY19jYXN0PGludD4oZXJyb3IudHlwZSgpKSkKLXsKLX0KLQotRXJyb3I6Om9wZXJh
dG9yIFdlYkNvcmU6OlJlc291cmNlRXJyb3IoKSBjb25zdAotewotICAgIFdlYkNvcmU6OlJlc291
cmNlRXJyb3IgZXJyb3IoZG9tYWluLCBlcnJvckNvZGUsIFVSTCh7IH0sIGZhaWxpbmdVUkwpLCBs
b2NhbGl6ZWREZXNjcmlwdGlvbiwgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6UmVzb3VyY2VFcnJvcjo6
VHlwZT4odHlwZSkpOwotCi0gICAgcmV0dXJuIGVycm9yOwotfQotCi0vLyAtLS0tLS0tLS0tCi0K
LS8vIFNFRSBUSEUgTk9URSBJTiBqc29uLmhwcCBSRUdBUkRJTkcgSVRTIFVTRSBJTiBUSElTIFBS
T0pFQ1QuIElOIFNIT1JULCBETyBOT1QKLS8vIFVTRSBqc29uLmhwcCBBTllXSEVSRSBFTFNFLiBJ
VCBXSUxMIEJFIEdPSU5HIEFXQVkuCi11c2luZyBqc29uID0gbmxvaG1hbm46OmJhc2ljX2pzb248
PjsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KLXN0cnVjdCBKU09OQ29kZXIgewotICAgIHN0
YXRpYyBqc29uIGVuY29kZShUeXBlIHZhbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc29uKHZh
bCk7Ci0gICAgfQotCi0gICAgc3RhdGljIFR5cGUgZGVjb2RlKGNvbnN0IGpzb24mIGpWYWwpCi0g
ICAgewotICAgICAgICByZXR1cm4galZhbC5nZXQ8VHlwZT4oKTsKLSAgICB9Ci19OwotCi10ZW1w
bGF0ZTw+Ci1zdHJ1Y3QgSlNPTkNvZGVyPGNvbnN0IGNoYXIqPiB7Ci0gICAgc3RhdGljIGpzb24g
ZW5jb2RlKGNvbnN0IGNoYXIqIHZhbCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc29uKHZhbCk7
Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IEpTT05Db2RlcjxTdHJpbmc+IHsKLSAg
ICBzdGF0aWMganNvbiBlbmNvZGUoY29uc3QgU3RyaW5nJiB2YWwpCi0gICAgewotICAgICAgICBy
ZXR1cm4ganNvbihzdGQ6OnN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4odmFsLnV0Zjgo
KS5kYXRhKCkpLCB2YWwubGVuZ3RoKCkpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgU3RyaW5nIGRl
Y29kZShjb25zdCBqc29uJiBqVmFsKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cmluZyhqVmFs
LmdldF9yZWY8Y29uc3Qgc3RkOjpzdHJpbmcmPigpLmNfc3RyKCkpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4KLXN0cnVjdCBKU09OQ29kZXI8Q2FwdHVyZVRpbWVUeXBlPiB7Ci0gICAgc3RhdGlj
IGpzb24gZW5jb2RlKGNvbnN0IENhcHR1cmVUaW1lVHlwZSYgdGltZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBKU09OQ29kZXI8ZG91YmxlPjo6ZW5jb2RlKHRpbWUuc2Vjb25kc1NpbmNlRXBvY2go
KS5zZWNvbmRzKCkpOwotICAgIH0KLQotICAgIHN0YXRpYyBDYXB0dXJlVGltZVR5cGUgZGVjb2Rl
KGNvbnN0IGpzb24mIGpUaW1lKQotICAgIHsKLSAgICAgICAgcmV0dXJuIENhcHR1cmVUaW1lVHlw
ZTo6ZnJvbVJhd1NlY29uZHMoSlNPTkNvZGVyPGRvdWJsZT46OmRlY29kZShqVGltZSkpOwotICAg
IH0KLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBKU09OQ29kZXI8S2V5VmFsdWVQYWlyPiB7Ci0g
ICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IEtleVZhbHVlUGFpciYgcGFpcikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBqc29uIHsKLSAgICAgICAgICAgIEpTT05Db2RlcjxTdHJpbmc+OjplbmNv
ZGUocGFpci5maXJzdCksCi0gICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKHBh
aXIuc2Vjb25kKQotICAgICAgICB9OwotICAgIH0KLQotICAgIHN0YXRpYyBLZXlWYWx1ZVBhaXIg
ZGVjb2RlKGNvbnN0IGpzb24mIGpQYWlyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEtleVZhbHVl
UGFpciB7Ci0gICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKGpQYWlyWzBdKSwK
LSAgICAgICAgICAgIEpTT05Db2RlcjxTdHJpbmc+OjpkZWNvZGUoalBhaXJbMV0pCi0gICAgICAg
IH07Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0cnVjdCBKU09OQ29kZXI8
VmVjdG9yPFQ+PiB7Ci0gICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IFZlY3RvcjxUPiYgdmVj
dG9yKQotICAgIHsKLSAgICAgICAganNvbiBqVmVjdG9yOwotCi0gICAgICAgIGZvciAoY29uc3Qg
YXV0byYgZWxlbWVudCA6IHZlY3RvcikKLSAgICAgICAgICAgIGpWZWN0b3IucHVzaF9iYWNrKEpT
T05Db2RlcjxUPjo6ZW5jb2RlKGVsZW1lbnQpKTsKLQotICAgICAgICByZXR1cm4galZlY3RvcjsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgVmVjdG9yPFQ+IGRlY29kZShjb25zdCBqc29uJiBqVmVjdG9y
KQotICAgIHsKLSAgICAgICAgVmVjdG9yPFQ+IHZlY3RvcjsKLQotICAgICAgICBmb3IgKGNvbnN0
IGF1dG8mIGVsZW1lbnQgOiBqVmVjdG9yKQotICAgICAgICAgICAgdmVjdG9yLmFwcGVuZChKU09O
Q29kZXI8VD46OmRlY29kZShlbGVtZW50KSk7Ci0KLSAgICAgICAgcmV0dXJuIHZlY3RvcjsKLSAg
ICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgSlNPTkNvZGVyPFJlcXVlc3Q+IHsKLSAgICBz
dGF0aWMganNvbiBlbmNvZGUoY29uc3QgUmVxdWVzdCYgcmVxdWVzdCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBqc29uIHsKLSAgICAgICAgICAgIHsgInVybCIsIEpTT05Db2RlcjxTdHJpbmc+Ojpl
bmNvZGUocmVxdWVzdC51cmwpIH0sCi0gICAgICAgICAgICB7ICJyZWZlcnJlciIsIEpTT05Db2Rl
cjxTdHJpbmc+OjplbmNvZGUocmVxdWVzdC5yZWZlcnJlcikgfSwKLSAgICAgICAgICAgIHsgInBv
bGljeSIsIEpTT05Db2RlcjxpbnQ+OjplbmNvZGUocmVxdWVzdC5wb2xpY3kpIH0sCi0gICAgICAg
ICAgICB7ICJtZXRob2QiLCBKU09OQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKHJlcXVlc3QubWV0aG9k
KSB9LAotICAgICAgICAgICAgeyAiaGVhZGVycyIsIEpTT05Db2RlcjxIZWFkZXJzPjo6ZW5jb2Rl
KHJlcXVlc3QuaGVhZGVycykgfQotICAgICAgICB9OwotICAgIH0KLQotICAgIHN0YXRpYyBSZXF1
ZXN0IGRlY29kZShjb25zdCBqc29uJiBqUmVxdWVzdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBS
ZXF1ZXN0IHsKLSAgICAgICAgICAgIEpTT05Db2RlcjxTdHJpbmc+OjpkZWNvZGUoalJlcXVlc3Rb
InVybCJdKSwKLSAgICAgICAgICAgIEpTT05Db2RlcjxTdHJpbmc+OjpkZWNvZGUoalJlcXVlc3Rb
InJlZmVycmVyIl0pLAotICAgICAgICAgICAgSlNPTkNvZGVyPGludD46OmRlY29kZShqUmVxdWVz
dFsicG9saWN5Il0pLAotICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmluZz46OmRlY29kZShqUmVx
dWVzdFsibWV0aG9kIl0pLAotICAgICAgICAgICAgSlNPTkNvZGVyPEhlYWRlcnM+OjpkZWNvZGUo
alJlcXVlc3RbImhlYWRlcnMiXSkKLSAgICAgICAgfTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+
Ci1zdHJ1Y3QgSlNPTkNvZGVyPFJlc3BvbnNlPiB7Ci0gICAgc3RhdGljIGpzb24gZW5jb2RlKGNv
bnN0IFJlc3BvbnNlJiByZXNwb25zZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc29uIHsKLSAg
ICAgICAgICAgIHsgInVybCIsIEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUocmVzcG9uc2UudXJs
KSB9LAotICAgICAgICAgICAgeyAibWltZVR5cGUiLCBKU09OQ29kZXI8U3RyaW5nPjo6ZW5jb2Rl
KHJlc3BvbnNlLm1pbWVUeXBlKSB9LAotICAgICAgICAgICAgeyAiZXhwZWN0ZWRMZW5ndGgiLCBK
U09OQ29kZXI8bG9uZyBsb25nPjo6ZW5jb2RlKHJlc3BvbnNlLmV4cGVjdGVkTGVuZ3RoKSB9LAot
ICAgICAgICAgICAgeyAidGV4dEVuY29kaW5nTmFtZSIsIEpTT05Db2RlcjxTdHJpbmc+OjplbmNv
ZGUocmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSkgfSwKLSAgICAgICAgICAgIHsgInZlcnNpb24i
LCBKU09OQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKHJlc3BvbnNlLnZlcnNpb24pIH0sCi0gICAgICAg
ICAgICB7ICJzdGF0dXMiLCBKU09OQ29kZXI8aW50Pjo6ZW5jb2RlKHJlc3BvbnNlLnN0YXR1cykg
fSwKLSAgICAgICAgICAgIHsgInJlYXNvbiIsIEpTT05Db2RlcjxTdHJpbmc+OjplbmNvZGUocmVz
cG9uc2UucmVhc29uKSB9LAotICAgICAgICAgICAgeyAiaGVhZGVycyIsIEpTT05Db2RlcjxIZWFk
ZXJzPjo6ZW5jb2RlKHJlc3BvbnNlLmhlYWRlcnMpIH0KLSAgICAgICAgfTsKLSAgICB9Ci0KLSAg
ICBzdGF0aWMgUmVzcG9uc2UgZGVjb2RlKGNvbnN0IGpzb24mIGpSZXNwb25zZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBSZXNwb25zZSB7Ci0gICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5nPjo6
ZGVjb2RlKGpSZXNwb25zZVsidXJsIl0pLAotICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmluZz46
OmRlY29kZShqUmVzcG9uc2VbIm1pbWVUeXBlIl0pLAotICAgICAgICAgICAgSlNPTkNvZGVyPGxv
bmcgbG9uZz46OmRlY29kZShqUmVzcG9uc2VbImV4cGVjdGVkTGVuZ3RoIl0pLAotICAgICAgICAg
ICAgSlNPTkNvZGVyPFN0cmluZz46OmRlY29kZShqUmVzcG9uc2VbInRleHRFbmNvZGluZ05hbWUi
XSksCi0gICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKGpSZXNwb25zZVsidmVy
c2lvbiJdKSwKLSAgICAgICAgICAgIEpTT05Db2RlcjxpbnQ+OjpkZWNvZGUoalJlc3BvbnNlWyJz
dGF0dXMiXSksCi0gICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKGpSZXNwb25z
ZVsicmVhc29uIl0pLAotICAgICAgICAgICAgSlNPTkNvZGVyPEhlYWRlcnM+OjpkZWNvZGUoalJl
c3BvbnNlWyJoZWFkZXJzIl0pCi0gICAgICAgIH07Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8Pgot
c3RydWN0IEpTT05Db2RlcjxFcnJvcj4gewotICAgIHN0YXRpYyBqc29uIGVuY29kZShjb25zdCBF
cnJvciYgZXJyb3IpCi0gICAgewotICAgICAgICByZXR1cm4ganNvbiB7Ci0gICAgICAgICAgICB7
ICJkb21haW4iLCBKU09OQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKGVycm9yLmRvbWFpbikgfSwKLSAg
ICAgICAgICAgIHsgImZhaWxpbmdVUkwiLCBKU09OQ29kZXI8U3RyaW5nPjo6ZW5jb2RlKGVycm9y
LmZhaWxpbmdVUkwpIH0sCi0gICAgICAgICAgICB7ICJsb2NhbGl6ZWREZXNjcmlwdGlvbiIsIEpT
T05Db2RlcjxTdHJpbmc+OjplbmNvZGUoZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24pIH0sCi0g
ICAgICAgICAgICB7ICJlcnJvckNvZGUiLCBKU09OQ29kZXI8aW50Pjo6ZW5jb2RlKGVycm9yLmVy
cm9yQ29kZSkgfSwKLSAgICAgICAgICAgIHsgInR5cGUiLCBKU09OQ29kZXI8aW50Pjo6ZW5jb2Rl
KGVycm9yLnR5cGUpIH0KLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgRXJyb3IgZGVj
b2RlKGNvbnN0IGpzb24mIGpFcnJvcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBFcnJvciB7Ci0g
ICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKGpFcnJvclsiZG9tYWluIl0pLAot
ICAgICAgICAgICAgSlNPTkNvZGVyPFN0cmluZz46OmRlY29kZShqRXJyb3JbImZhaWxpbmdVUkwi
XSksCi0gICAgICAgICAgICBKU09OQ29kZXI8U3RyaW5nPjo6ZGVjb2RlKGpFcnJvclsibG9jYWxp
emVkRGVzY3JpcHRpb24iXSksCi0gICAgICAgICAgICBKU09OQ29kZXI8aW50Pjo6ZGVjb2RlKGpF
cnJvclsiZXJyb3JDb2RlIl0pLAotICAgICAgICAgICAgSlNPTkNvZGVyPGludD46OmRlY29kZShq
RXJyb3JbInR5cGUiXSkKLSAgICAgICAgfTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1
Y3QgSlNPTkNvZGVyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gewotICAgIHN0YXRpYyBqc29uIGVu
Y29kZShjb25zdCBXZWJDb3JlOjpTaGFyZWRCdWZmZXImIGRhdGEpCi0gICAgewotICAgICAgICBW
ZWN0b3I8Y2hhcj4gYnVmZmVyOwotICAgICAgICBiYXNlNjRFbmNvZGUoZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpLCBidWZmZXIpOwotICAgICAgICByZXR1cm4ganNvbihzdGQ6OnN0cmluZygmYnVm
ZmVyWzBdLCBidWZmZXIuc2l6ZSgpKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+IGRlY29kZShjb25zdCBqc29uJiBqRGF0YSkKLSAgICB7Ci0gICAgICAg
IFZlY3RvcjxjaGFyPiBkYXRhOwotICAgICAgICBjb25zdCBhdXRvJiBzdHIgPSBqRGF0YS5nZXRf
cmVmPGNvbnN0IHN0ZDo6c3RyaW5nJj4oKTsKLSAgICAgICAgYXV0byByZXN1bHQgPSBiYXNlNjRE
ZWNvZGUoc3RyLmNfc3RyKCksIHN0ci5zaXplKCksIGRhdGEpOwotICAgICAgICBBU1NFUlRfVU5V
U0VEKHJlc3VsdCwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKFdURk1vdmUoZGF0YSkpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVj
dCBKU09OQ29kZXI8UmVxdWVzdFNlbnRFdmVudD4gewotICAgIHN0YXRpYyBqc29uIGVuY29kZShj
b25zdCBSZXF1ZXN0U2VudEV2ZW50JiBldmVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc29u
IHsKLSAgICAgICAgICAgIHsgInR5cGUiLCBKU09OQ29kZXI8Y29uc3QgY2hhcio+OjplbmNvZGUo
ZXZlbnQudHlwZU5hbWUpIH0sCi0gICAgICAgICAgICB7ICJ0aW1lIiwgSlNPTkNvZGVyPENhcHR1
cmVUaW1lVHlwZT46OmVuY29kZShldmVudC50aW1lKSB9LAotICAgICAgICAgICAgeyAicmVxdWVz
dCIsIEpTT05Db2RlcjxSZXF1ZXN0Pjo6ZW5jb2RlKGV2ZW50LnJlcXVlc3QpIH0KLSAgICAgICAg
fTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVxdWVzdFNlbnRFdmVudCBkZWNvZGUoY29uc3QganNv
biYgakV2ZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFJlcXVlc3RTZW50RXZlbnQgewotICAg
ICAgICAgICAgSlNPTkNvZGVyPENhcHR1cmVUaW1lVHlwZT46OmRlY29kZShqRXZlbnRbInRpbWUi
XSksCi0gICAgICAgICAgICBKU09OQ29kZXI8UmVxdWVzdD46OmRlY29kZShqRXZlbnRbInJlcXVl
c3QiXSkKLSAgICAgICAgfTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgSlNPTkNv
ZGVyPFJlc3BvbnNlUmVjZWl2ZWRFdmVudD4gewotICAgIHN0YXRpYyBqc29uIGVuY29kZShjb25z
dCBSZXNwb25zZVJlY2VpdmVkRXZlbnQmIGV2ZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGpz
b24gewotICAgICAgICAgICAgeyAidHlwZSIsIEpTT05Db2Rlcjxjb25zdCBjaGFyKj46OmVuY29k
ZShldmVudC50eXBlTmFtZSkgfSwKLSAgICAgICAgICAgIHsgInRpbWUiLCBKU09OQ29kZXI8Q2Fw
dHVyZVRpbWVUeXBlPjo6ZW5jb2RlKGV2ZW50LnRpbWUpIH0sCi0gICAgICAgICAgICB7ICJyZXNw
b25zZSIsIEpTT05Db2RlcjxSZXNwb25zZT46OmVuY29kZShldmVudC5yZXNwb25zZSkgfQotICAg
ICAgICB9OwotICAgIH0KLQotICAgIHN0YXRpYyBSZXNwb25zZVJlY2VpdmVkRXZlbnQgZGVjb2Rl
KGNvbnN0IGpzb24mIGpFdmVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBSZXNwb25zZVJlY2Vp
dmVkRXZlbnQgewotICAgICAgICAgICAgSlNPTkNvZGVyPENhcHR1cmVUaW1lVHlwZT46OmRlY29k
ZShqRXZlbnRbInRpbWUiXSksCi0gICAgICAgICAgICBKU09OQ29kZXI8UmVzcG9uc2U+OjpkZWNv
ZGUoakV2ZW50WyJyZXNwb25zZSJdKQotICAgICAgICB9OwotICAgIH0KLX07Ci0KLXRlbXBsYXRl
PD4KLXN0cnVjdCBKU09OQ29kZXI8UmVkaXJlY3RSZWNlaXZlZEV2ZW50PiB7Ci0gICAgc3RhdGlj
IGpzb24gZW5jb2RlKGNvbnN0IFJlZGlyZWN0UmVjZWl2ZWRFdmVudCYgZXZlbnQpCi0gICAgewot
ICAgICAgICByZXR1cm4ganNvbiB7Ci0gICAgICAgICAgICB7ICJ0eXBlIiwgSlNPTkNvZGVyPGNv
bnN0IGNoYXIqPjo6ZW5jb2RlKGV2ZW50LnR5cGVOYW1lKSB9LAotICAgICAgICAgICAgeyAidGlt
ZSIsIEpTT05Db2RlcjxDYXB0dXJlVGltZVR5cGU+OjplbmNvZGUoZXZlbnQudGltZSkgfSwKLSAg
ICAgICAgICAgIHsgInJlcXVlc3QiLCBKU09OQ29kZXI8UmVxdWVzdD46OmVuY29kZShldmVudC5y
ZXF1ZXN0KSB9LAotICAgICAgICAgICAgeyAicmVzcG9uc2UiLCBKU09OQ29kZXI8UmVzcG9uc2U+
OjplbmNvZGUoZXZlbnQucmVzcG9uc2UpIH0KLSAgICAgICAgfTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgUmVkaXJlY3RSZWNlaXZlZEV2ZW50IGRlY29kZShjb25zdCBqc29uJiBqRXZlbnQpCi0gICAg
ewotICAgICAgICByZXR1cm4gUmVkaXJlY3RSZWNlaXZlZEV2ZW50IHsKLSAgICAgICAgICAgIEpT
T05Db2RlcjxDYXB0dXJlVGltZVR5cGU+OjpkZWNvZGUoakV2ZW50WyJ0aW1lIl0pLAotICAgICAg
ICAgICAgSlNPTkNvZGVyPFJlcXVlc3Q+OjpkZWNvZGUoakV2ZW50WyJyZXF1ZXN0Il0pLAotICAg
ICAgICAgICAgSlNPTkNvZGVyPFJlc3BvbnNlPjo6ZGVjb2RlKGpFdmVudFsicmVzcG9uc2UiXSkK
LSAgICAgICAgfTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgSlNPTkNvZGVyPFJl
ZGlyZWN0U2VudEV2ZW50PiB7Ci0gICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IFJlZGlyZWN0
U2VudEV2ZW50JiBldmVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc29uIHsKLSAgICAgICAg
ICAgIHsgInR5cGUiLCBKU09OQ29kZXI8Y29uc3QgY2hhcio+OjplbmNvZGUoZXZlbnQudHlwZU5h
bWUpIH0sCi0gICAgICAgICAgICB7ICJ0aW1lIiwgSlNPTkNvZGVyPENhcHR1cmVUaW1lVHlwZT46
OmVuY29kZShldmVudC50aW1lKSB9LAotICAgICAgICAgICAgeyAicmVxdWVzdCIsIEpTT05Db2Rl
cjxSZXF1ZXN0Pjo6ZW5jb2RlKGV2ZW50LnJlcXVlc3QpIH0sCi0gICAgICAgIH07Ci0gICAgfQot
Ci0gICAgc3RhdGljIFJlZGlyZWN0U2VudEV2ZW50IGRlY29kZShjb25zdCBqc29uJiBqRXZlbnQp
Ci0gICAgewotICAgICAgICByZXR1cm4gUmVkaXJlY3RTZW50RXZlbnQgewotICAgICAgICAgICAg
SlNPTkNvZGVyPENhcHR1cmVUaW1lVHlwZT46OmRlY29kZShqRXZlbnRbInRpbWUiXSksCi0gICAg
ICAgICAgICBKU09OQ29kZXI8UmVxdWVzdD46OmRlY29kZShqRXZlbnRbInJlcXVlc3QiXSkKLSAg
ICAgICAgfTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgSlNPTkNvZGVyPERhdGFS
ZWNlaXZlZEV2ZW50PiB7Ci0gICAgc3RhdGljIGpzb24gZW5jb2RlKGNvbnN0IERhdGFSZWNlaXZl
ZEV2ZW50JiBldmVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBqc29uIHsKLSAgICAgICAgICAg
IHsgInR5cGUiLCBKU09OQ29kZXI8Y29uc3QgY2hhcio+OjplbmNvZGUoZXZlbnQudHlwZU5hbWUp
IH0sCi0gICAgICAgICAgICB7ICJ0aW1lIiwgSlNPTkNvZGVyPENhcHR1cmVUaW1lVHlwZT46OmVu
Y29kZShldmVudC50aW1lKSB9LAotICAgICAgICAgICAgeyAiZGF0YSIsIEpTT05Db2RlcjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+OjplbmNvZGUoZXZlbnQuZGF0YS5nZXQoKSkgfQotICAgICAgICB9
OwotICAgIH0KLQotICAgIHN0YXRpYyBEYXRhUmVjZWl2ZWRFdmVudCBkZWNvZGUoY29uc3QganNv
biYgakV2ZW50KQotICAgIHsKLSAgICAgICAgcmV0dXJuIERhdGFSZWNlaXZlZEV2ZW50IHsKLSAg
ICAgICAgICAgIEpTT05Db2RlcjxDYXB0dXJlVGltZVR5cGU+OjpkZWNvZGUoakV2ZW50WyJ0aW1l
Il0pLAotICAgICAgICAgICAgSlNPTkNvZGVyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj46OmRlY29k
ZShqRXZlbnRbImRhdGEiXSkKLSAgICAgICAgfTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1z
dHJ1Y3QgSlNPTkNvZGVyPEZpbmlzaGVkRXZlbnQ+IHsKLSAgICBzdGF0aWMganNvbiBlbmNvZGUo
Y29uc3QgRmluaXNoZWRFdmVudCYgZXZlbnQpCi0gICAgewotICAgICAgICByZXR1cm4ganNvbiB7
Ci0gICAgICAgICAgICB7ICJ0eXBlIiwgSlNPTkNvZGVyPGNvbnN0IGNoYXIqPjo6ZW5jb2RlKGV2
ZW50LnR5cGVOYW1lKSB9LAotICAgICAgICAgICAgeyAidGltZSIsIEpTT05Db2RlcjxDYXB0dXJl
VGltZVR5cGU+OjplbmNvZGUoZXZlbnQudGltZSkgfSwKLSAgICAgICAgICAgIHsgImVycm9yIiwg
SlNPTkNvZGVyPEVycm9yPjo6ZW5jb2RlKGV2ZW50LmVycm9yKSB9Ci0gICAgICAgIH07Ci0gICAg
fQotCi0gICAgc3RhdGljIEZpbmlzaGVkRXZlbnQgZGVjb2RlKGNvbnN0IGpzb24mIGpFdmVudCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBGaW5pc2hlZEV2ZW50IHsKLSAgICAgICAgICAgIEpTT05D
b2RlcjxDYXB0dXJlVGltZVR5cGU+OjpkZWNvZGUoakV2ZW50WyJ0aW1lIl0pLAotICAgICAgICAg
ICAgSlNPTkNvZGVyPEVycm9yPjo6ZGVjb2RlKGpFdmVudFsiZXJyb3IiXSkKLSAgICAgICAgfTsK
LSAgICB9Ci19OwotCi1zdGQ6OnN0cmluZyBldmVudFRvU3RyaW5nKGNvbnN0IENhcHR1cmVFdmVu
dCYgZXZlbnQpCi17Ci0gICAganNvbiByZXN1bHQ7Ci0KLSAgICBXVEY6OnZpc2l0KFsmcmVzdWx0
XShjb25zdCBhdXRvJiBldmVudCkgewotICAgICAgICB1c2luZyBFdmVudFR5cGUgPSBzdGQ6OmRl
Y2F5X3Q8ZGVjbHR5cGUoZXZlbnQpPjsKLSAgICAgICAgcmVzdWx0ID0gSlNPTkNvZGVyPEV2ZW50
VHlwZT46OmVuY29kZShldmVudCk7Ci0gICAgfSwgZXZlbnQpOwotCi0gICAgcmV0dXJuIHJlc3Vs
dC5kdW1wKDQpOwotfQotCi1PcHRpb25hbENhcHR1cmVFdmVudCBzdHJpbmdUb0V2ZW50KGNvbnN0
IGNoYXIqIGpzb25TdHIpCi17Ci0gICAgYXV0byBqVmFsdWUgPSBqc29uOjpwYXJzZShqc29uU3Ry
KTsKLSAgICBjb25zdCBhdXRvJiB0eXBlID0galZhbHVlWyJ0eXBlIl0uZ2V0X3JlZjxjb25zdCBz
dGQ6OnN0cmluZyY+KCk7Ci0KLSAgICBPcHRpb25hbENhcHR1cmVFdmVudCByZXN1bHQgeyBzdGQ6
Om51bGxvcHQgfTsKLSAgICBicmlnYW5kOjpmb3JfZWFjaDxDYXB0dXJlRXZlbnQ+KFsmXShhdXRv
IFQpIHsKLSAgICAgICAgdXNpbmcgVHlwZSA9IHR5cGVuYW1lIGRlY2x0eXBlKFQpOjp0eXBlOwot
ICAgICAgICBpZiAoIXJlc3VsdCAmJiB0eXBlID09IFR5cGU6OnR5cGVOYW1lKQotICAgICAgICAg
ICAgcmVzdWx0ID0gT3B0aW9uYWxDYXB0dXJlRXZlbnQoSlNPTkNvZGVyPFR5cGU+OjpkZWNvZGUo
alZhbHVlKSk7Ci0gICAgfSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgTmV0d29ya0NhcHR1cmUKLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jdW5kZWYgSlNPTl9O
T0VYQ0VQVElPTlMKLQotI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVF
dmVudC5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0
dXJlRXZlbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM4NDI3ODM5NWJmZDNm
MmYxZGFhN2M1ZDk2ZTdkNzNkNmQzOWU4NS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVFdmVudC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCi0KLSNp
bmNsdWRlIDxXZWJDb3JlL1NoYXJlZEJ1ZmZlci5oPgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
Ci0jaW5jbHVkZSA8d3RmL01vbm90b25pY1RpbWUuaD4KLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUmVzb3VyY2VFcnJvcjsKLWNsYXNzIFJl
c291cmNlUmVxdWVzdDsKLWNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci19Ci0KLW5hbWVzcGFjZSBX
ZWJLaXQgewotbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsKLQotc3RydWN0IFJlcXVlc3RTZW50
RXZlbnQ7Ci1zdHJ1Y3QgUmVzcG9uc2VSZWNlaXZlZEV2ZW50Owotc3RydWN0IFJlZGlyZWN0UmVj
ZWl2ZWRFdmVudDsKLXN0cnVjdCBSZWRpcmVjdFNlbnRFdmVudDsKLXN0cnVjdCBEYXRhUmVjZWl2
ZWRFdmVudDsKLXN0cnVjdCBGaW5pc2hlZEV2ZW50OwotCi11c2luZyBDYXB0dXJlRXZlbnQgPSBX
VEY6OlZhcmlhbnQ8UmVxdWVzdFNlbnRFdmVudCwgUmVzcG9uc2VSZWNlaXZlZEV2ZW50LCBSZWRp
cmVjdFJlY2VpdmVkRXZlbnQsIFJlZGlyZWN0U2VudEV2ZW50LCBEYXRhUmVjZWl2ZWRFdmVudCwg
RmluaXNoZWRFdmVudD47Ci11c2luZyBPcHRpb25hbENhcHR1cmVFdmVudCA9IHN0ZDo6b3B0aW9u
YWw8Q2FwdHVyZUV2ZW50PjsKLXVzaW5nIENhcHR1cmVFdmVudHMgPSBWZWN0b3I8Q2FwdHVyZUV2
ZW50PjsKLXVzaW5nIENhcHR1cmVDbG9ja1R5cGUgPSBXVEY6Ok1vbm90b25pY1RpbWU7Ci11c2lu
ZyBDYXB0dXJlVGltZVR5cGUgPSBXVEY6Ok1vbm90b25pY1RpbWU7Ci11c2luZyBLZXlWYWx1ZVBh
aXIgPSBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+OwotdXNpbmcgSGVhZGVycyA9IFZlY3RvcjxL
ZXlWYWx1ZVBhaXI+OwotCi1zdGQ6OnN0cmluZyBldmVudFRvU3RyaW5nKGNvbnN0IENhcHR1cmVF
dmVudCYpOwotT3B0aW9uYWxDYXB0dXJlRXZlbnQgc3RyaW5nVG9FdmVudChjb25zdCBjaGFyKik7
Ci0KLXN0cnVjdCBSZXF1ZXN0IHsKLSAgICAvLyBTZWUgY29tbWVudCBmb3IgUmVxdWVzdFNlbnRF
dmVudCBmb3Igd2h5IHdlIG5lZWQgdGhpcyBkZWZhdWx0IGNvbnN0cnVjdG9yLgotICAgIFJlcXVl
c3QoKQotICAgICAgICA6IHVybCgpCi0gICAgICAgICwgcmVmZXJyZXIoKQotICAgICAgICAsIHBv
bGljeSgwKQotICAgICAgICAsIG1ldGhvZCgpCi0gICAgICAgICwgaGVhZGVycygpIHsgfQotICAg
IFJlcXVlc3QoU3RyaW5nJiYgdXJsLCBTdHJpbmcmJiByZWZlcnJlciwgaW50IHBvbGljeSwgU3Ry
aW5nJiYgbWV0aG9kLCBIZWFkZXJzJiYpOwotICAgIFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Jik7Ci0gICAgb3BlcmF0b3IgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0KCkg
Y29uc3Q7Ci0KLSAgICBTdHJpbmcgdXJsOwotICAgIFN0cmluZyByZWZlcnJlcjsKLSAgICBpbnQg
cG9saWN5OwotICAgIFN0cmluZyBtZXRob2Q7Ci0gICAgSGVhZGVycyBoZWFkZXJzOwotfTsKLXN0
YXRpY19hc3NlcnQoc3RkOjppc19kZWZhdWx0X2NvbnN0cnVjdGlibGU8UmVxdWVzdD46OnZhbHVl
LCAiUmVxdWVzdCBpcyBub3QgZGVmYXVsdCBjb25zdHJ1Y3RpYmxlIik7Ci1zdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPFJlcXVlc3Q+Ojp2YWx1ZSwgIlJlcXVlc3QgaXMg
bm90IG1vdmUgY29uc3RydWN0aWJsZSIpOwotc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfYXNz
aWduYWJsZTxSZXF1ZXN0Pjo6dmFsdWUsICJSZXF1ZXN0IGlzIG5vdCBtb3ZlIGFzc2lnbmFibGUi
KTsKLQotc3RydWN0IFJlc3BvbnNlIHsKLSAgICBSZXNwb25zZShTdHJpbmcmJiB1cmwsIFN0cmlu
ZyYmIG1pbWVUeXBlLCBsb25nIGxvbmcgZXhwZWN0ZWRMZW5ndGgsIFN0cmluZyYmIHRleHRFbmNv
ZGluZ05hbWUsIFN0cmluZyYmIHZlcnNpb24sIGludCBzdGF0dXMsIFN0cmluZyYmIHJlYXNvbiwg
SGVhZGVycyYmKTsKLSAgICBSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
Jik7Ci0gICAgb3BlcmF0b3IgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSgpIGNvbnN0OwotCi0g
ICAgU3RyaW5nIHVybDsKLSAgICBTdHJpbmcgbWltZVR5cGU7Ci0gICAgbG9uZyBsb25nIGV4cGVj
dGVkTGVuZ3RoOwotICAgIFN0cmluZyB0ZXh0RW5jb2RpbmdOYW1lOwotICAgIFN0cmluZyB2ZXJz
aW9uOwotICAgIGludCBzdGF0dXM7Ci0gICAgU3RyaW5nIHJlYXNvbjsKLSAgICBIZWFkZXJzIGhl
YWRlcnM7Ci19Owotc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxSZXNw
b25zZT46OnZhbHVlLCAiUmVzcG9uc2UgaXMgbm90IG1vdmUgY29uc3RydWN0aWJsZSIpOwotc3Rh
dGljX2Fzc2VydChzdGQ6OmlzX21vdmVfYXNzaWduYWJsZTxSZXNwb25zZT46OnZhbHVlLCAiUmVz
cG9uc2UgaXMgbm90IG1vdmUgYXNzaWduYWJsZSIpOwotCi1zdHJ1Y3QgRXJyb3IgewotICAgIEVy
cm9yKFN0cmluZyYmIGRvbWFpbiwgU3RyaW5nJiYgZmFpbGluZ1VSTCwgU3RyaW5nJiYgbG9jYWxp
emVkRGVzY3JpcHRpb24sIGludCBlcnJvckNvZGUsIGludCB0eXBlKTsKLSAgICBFcnJvcihjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7Ci0gICAgb3BlcmF0b3IgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvcigpIGNvbnN0OwotCi0gICAgU3RyaW5nIGRvbWFpbjsKLSAgICBTdHJpbmcgZmFpbGlu
Z1VSTDsKLSAgICBTdHJpbmcgbG9jYWxpemVkRGVzY3JpcHRpb247Ci0gICAgaW50IGVycm9yQ29k
ZTsKLSAgICBpbnQgdHlwZTsKLX07Ci1zdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92ZV9jb25zdHJ1
Y3RpYmxlPEVycm9yPjo6dmFsdWUsICJFcnJvciBpcyBub3QgbW92ZSBjb25zdHJ1Y3RpYmxlIik7
Ci1zdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPEVycm9yPjo6dmFsdWUsICJF
cnJvciBpcyBub3QgbW92ZSBhc3NpZ25hYmxlIik7Ci0KLXN0cnVjdCBUaW1lZEV2ZW50IHsKLSAg
ICBUaW1lZEV2ZW50KCkKLSAgICAgICAgOiB0aW1lKENhcHR1cmVDbG9ja1R5cGU6Om5vdygpKSB7
IH0KLSAgICBUaW1lZEV2ZW50KENhcHR1cmVUaW1lVHlwZSYmIHRpbWUpCi0gICAgICAgIDogdGlt
ZShXVEZNb3ZlKHRpbWUpKSB7IH0KLQotICAgIENhcHR1cmVUaW1lVHlwZSB0aW1lOwotfTsKLXN0
YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2NvbnN0cnVjdGlibGU8VGltZWRFdmVudD46OnZhbHVl
LCAiVGltZWRFdmVudCBpcyBub3QgbW92ZSBjb25zdHJ1Y3RpYmxlIik7Ci1zdGF0aWNfYXNzZXJ0
KHN0ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPFRpbWVkRXZlbnQ+Ojp2YWx1ZSwgIlRpbWVkRXZlbnQg
aXMgbm90IG1vdmUgYXNzaWduYWJsZSIpOwotCi1zdHJ1Y3QgUmVxdWVzdFNlbnRFdmVudCBmaW5h
bCA6IHB1YmxpYyBUaW1lZEV2ZW50IHsKLSAgICAvLyBUaGlzIGRlZmF1bHQgY29uc3RydWN0b3Ig
aXMgbmVlZGVkIG9ubHkgYmVjYXVzZSB0aGlzIHN0cnVjdCBpcyB0aGUgZmlyc3QKLSAgICAvLyB0
eXBlIHBhc3NlZCB0byBDYXB0dXJlRXZlbnQsIHdoaWNoIGlzIGEgV1RGOjpWYXJpYW50LiBUaGlz
IG1lYW5zIHRoYXQgaWYKLSAgICAvLyBDYXB0dXJlRXZlbnQgaXMgZGVmYXVsdC1jb25zdHJ1Y3Rl
ZCwgaXQgbmVlZHMgdG8gZGVmYXVsdC1jb25zdHJ1Y3QgYW4KLSAgICAvLyBpbnN0YW5jZSBvZiBS
ZXF1ZXN0U2VudEV2ZW50LCB0aGUgZmlyc3QgdHlwZSBvbiBpdHMgbGlzdC4gSWYgd2UgZG9uJ3QK
LSAgICAvLyBoYXZlIGEgZGVmYXVsdCBjb25zdHJ1Y3RvciBmb3IgdGhpcyB0eXBlLCB0aGUgQ2Fw
dHVyZUV2ZW50IHdpbGwgYmUKLSAgICAvLyBjcmVhdGVkIGluIGFuIGludmFsaWQgc3RhdGUgYW5k
IHdpbGwgY3Jhc2ggd2hlbiBkZXN0cnVjdGVkLgotICAgIFJlcXVlc3RTZW50RXZlbnQoKQotICAg
ICAgICA6IFRpbWVkRXZlbnQoKQotICAgICAgICAsIHJlcXVlc3QoKSB7IH0KLSAgICBSZXF1ZXN0
U2VudEV2ZW50KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLSAgICAg
ICAgOiBUaW1lZEV2ZW50KCkKLSAgICAgICAgLCByZXF1ZXN0KHJlcXVlc3QpIHsgfQotICAgIFJl
cXVlc3RTZW50RXZlbnQoQ2FwdHVyZVRpbWVUeXBlJiYgdGltZSwgUmVxdWVzdCYmIHJlcXVlc3Qp
Ci0gICAgICAgIDogVGltZWRFdmVudChXVEZNb3ZlKHRpbWUpKQotICAgICAgICAsIHJlcXVlc3Qo
V1RGTW92ZShyZXF1ZXN0KSkgeyB9Ci0KLSAgICBSZXF1ZXN0IHJlcXVlc3Q7Ci0gICAgc3RhdGlj
IGNvbnN0IGNoYXIgdHlwZU5hbWVbXTsKLX07Ci1zdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfZGVmYXVs
dF9jb25zdHJ1Y3RpYmxlPFJlcXVlc3RTZW50RXZlbnQ+Ojp2YWx1ZSwgIlJlcXVlc3RTZW50RXZl
bnQgaXMgbm90IGRlZmF1bHQgY29uc3RydWN0aWJsZSIpOwotc3RhdGljX2Fzc2VydChzdGQ6Omlz
X21vdmVfY29uc3RydWN0aWJsZTxSZXF1ZXN0U2VudEV2ZW50Pjo6dmFsdWUsICJSZXF1ZXN0U2Vu
dEV2ZW50IGlzIG5vdCBtb3ZlIGNvbnN0cnVjdGlibGUiKTsKLXN0YXRpY19hc3NlcnQoc3RkOjpp
c19tb3ZlX2Fzc2lnbmFibGU8UmVxdWVzdFNlbnRFdmVudD46OnZhbHVlLCAiUmVxdWVzdFNlbnRF
dmVudCBpcyBub3QgbW92ZSBhc3NpZ25hYmxlIik7Ci0KLXN0cnVjdCBSZXNwb25zZVJlY2VpdmVk
RXZlbnQgZmluYWwgOiBwdWJsaWMgVGltZWRFdmVudCB7Ci0gICAgUmVzcG9uc2VSZWNlaXZlZEV2
ZW50KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotICAgICAgICA6
IFRpbWVkRXZlbnQoKQotICAgICAgICAsIHJlc3BvbnNlKHJlc3BvbnNlKSB7IH0KLSAgICBSZXNw
b25zZVJlY2VpdmVkRXZlbnQoQ2FwdHVyZVRpbWVUeXBlJiYgdGltZSwgUmVzcG9uc2UmJiByZXNw
b25zZSkKLSAgICAgICAgOiBUaW1lZEV2ZW50KFdURk1vdmUodGltZSkpCi0gICAgICAgICwgcmVz
cG9uc2UoV1RGTW92ZShyZXNwb25zZSkpIHsgfQotCi0gICAgUmVzcG9uc2UgcmVzcG9uc2U7Ci0g
ICAgc3RhdGljIGNvbnN0IGNoYXIgdHlwZU5hbWVbXTsKLX07Ci1zdGF0aWNfYXNzZXJ0KHN0ZDo6
aXNfbW92ZV9jb25zdHJ1Y3RpYmxlPFJlc3BvbnNlUmVjZWl2ZWRFdmVudD46OnZhbHVlLCAiUmVz
cG9uc2VSZWNlaXZlZEV2ZW50IGlzIG5vdCBtb3ZlIGNvbnN0cnVjdGlibGUiKTsKLXN0YXRpY19h
c3NlcnQoc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU8UmVzcG9uc2VSZWNlaXZlZEV2ZW50Pjo6dmFs
dWUsICJSZXNwb25zZVJlY2VpdmVkRXZlbnQgaXMgbm90IG1vdmUgYXNzaWduYWJsZSIpOwotCi1z
dHJ1Y3QgUmVkaXJlY3RSZWNlaXZlZEV2ZW50IGZpbmFsIDogcHVibGljIFRpbWVkRXZlbnQgewot
ICAgIFJlZGlyZWN0UmVjZWl2ZWRFdmVudChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotICAg
ICAgICA6IFRpbWVkRXZlbnQoKQotICAgICAgICAsIHJlcXVlc3QocmVxdWVzdCkKLSAgICAgICAg
LCByZXNwb25zZShyZXNwb25zZSkgeyB9Ci0gICAgUmVkaXJlY3RSZWNlaXZlZEV2ZW50KENhcHR1
cmVUaW1lVHlwZSYmIHRpbWUsIFJlcXVlc3QmJiByZXF1ZXN0LCBSZXNwb25zZSYmIHJlc3BvbnNl
KQotICAgICAgICA6IFRpbWVkRXZlbnQoV1RGTW92ZSh0aW1lKSkKLSAgICAgICAgLCByZXF1ZXN0
KFdURk1vdmUocmVxdWVzdCkpCi0gICAgICAgICwgcmVzcG9uc2UoV1RGTW92ZShyZXNwb25zZSkp
IHsgfQotCi0gICAgUmVxdWVzdCByZXF1ZXN0OwotICAgIFJlc3BvbnNlIHJlc3BvbnNlOwotICAg
IHN0YXRpYyBjb25zdCBjaGFyIHR5cGVOYW1lW107Ci19Owotc3RhdGljX2Fzc2VydChzdGQ6Omlz
X21vdmVfY29uc3RydWN0aWJsZTxSZWRpcmVjdFJlY2VpdmVkRXZlbnQ+Ojp2YWx1ZSwgIlJlZGly
ZWN0UmVjZWl2ZWRFdmVudCBpcyBub3QgbW92ZSBjb25zdHJ1Y3RpYmxlIik7Ci1zdGF0aWNfYXNz
ZXJ0KHN0ZDo6aXNfbW92ZV9hc3NpZ25hYmxlPFJlZGlyZWN0UmVjZWl2ZWRFdmVudD46OnZhbHVl
LCAiUmVkaXJlY3RSZWNlaXZlZEV2ZW50IGlzIG5vdCBtb3ZlIGFzc2lnbmFibGUiKTsKLQotc3Ry
dWN0IFJlZGlyZWN0U2VudEV2ZW50IGZpbmFsIDogcHVibGljIFRpbWVkRXZlbnQgewotICAgIFJl
ZGlyZWN0U2VudEV2ZW50KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkK
LSAgICAgICAgOiBUaW1lZEV2ZW50KCkKLSAgICAgICAgLCByZXF1ZXN0KHJlcXVlc3QpIHsgfQot
ICAgIFJlZGlyZWN0U2VudEV2ZW50KENhcHR1cmVUaW1lVHlwZSYmIHRpbWUsIFJlcXVlc3QmJiBy
ZXF1ZXN0KQotICAgICAgICA6IFRpbWVkRXZlbnQoV1RGTW92ZSh0aW1lKSkKLSAgICAgICAgLCBy
ZXF1ZXN0KFdURk1vdmUocmVxdWVzdCkpIHsgfQotCi0gICAgUmVxdWVzdCByZXF1ZXN0OwotICAg
IHN0YXRpYyBjb25zdCBjaGFyIHR5cGVOYW1lW107Ci19Owotc3RhdGljX2Fzc2VydChzdGQ6Omlz
X21vdmVfY29uc3RydWN0aWJsZTxSZWRpcmVjdFNlbnRFdmVudD46OnZhbHVlLCAiUmVkaXJlY3RT
ZW50RXZlbnQgaXMgbm90IG1vdmUgY29uc3RydWN0aWJsZSIpOwotc3RhdGljX2Fzc2VydChzdGQ6
OmlzX21vdmVfYXNzaWduYWJsZTxSZWRpcmVjdFNlbnRFdmVudD46OnZhbHVlLCAiUmVkaXJlY3RT
ZW50RXZlbnQgaXMgbm90IG1vdmUgYXNzaWduYWJsZSIpOwotCi1zdHJ1Y3QgRGF0YVJlY2VpdmVk
RXZlbnQgZmluYWwgOiBwdWJsaWMgVGltZWRFdmVudCB7Ci0gICAgRGF0YVJlY2VpdmVkRXZlbnQo
KQotICAgICAgICA6IFRpbWVkRXZlbnQoKQotICAgICAgICAsIGRhdGEoV2ViQ29yZTo6U2hhcmVk
QnVmZmVyOjpjcmVhdGUoKSkgeyB9Ci0gICAgRGF0YVJlY2VpdmVkRXZlbnQoV2ViQ29yZTo6U2hh
cmVkQnVmZmVyJiBkYXRhKQotICAgICAgICA6IFRpbWVkRXZlbnQoKQotICAgICAgICAsIGRhdGEo
UmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4oZGF0YSkpIHsgfQotICAgIERhdGFSZWNlaXZlZEV2
ZW50KENhcHR1cmVUaW1lVHlwZSYmIHRpbWUsIFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgZGF0YSkK
LSAgICAgICAgOiBUaW1lZEV2ZW50KFdURk1vdmUodGltZSkpCi0gICAgICAgICwgZGF0YShSZWY8
V2ViQ29yZTo6U2hhcmVkQnVmZmVyPihkYXRhKSkgeyB9Ci0KLSAgICBSZWY8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPiBkYXRhOwotICAgIHN0YXRpYyBjb25zdCBjaGFyIHR5cGVOYW1lW107Ci19Owot
c3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxEYXRhUmVjZWl2ZWRFdmVu
dD46OnZhbHVlLCAiRGF0YVJlY2VpdmVkRXZlbnQgaXMgbm90IG1vdmUgY29uc3RydWN0aWJsZSIp
Owotc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfYXNzaWduYWJsZTxEYXRhUmVjZWl2ZWRFdmVu
dD46OnZhbHVlLCAiRGF0YVJlY2VpdmVkRXZlbnQgaXMgbm90IG1vdmUgYXNzaWduYWJsZSIpOwot
Ci1zdHJ1Y3QgRmluaXNoZWRFdmVudCBmaW5hbCA6IHB1YmxpYyBUaW1lZEV2ZW50IHsKLSAgICBG
aW5pc2hlZEV2ZW50KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQotICAgICAg
ICA6IFRpbWVkRXZlbnQoKQotICAgICAgICAsIGVycm9yKGVycm9yKSB7IH0KLSAgICBGaW5pc2hl
ZEV2ZW50KENhcHR1cmVUaW1lVHlwZSYmIHRpbWUsIEVycm9yJiYgZXJyb3IpCi0gICAgICAgIDog
VGltZWRFdmVudChXVEZNb3ZlKHRpbWUpKQotICAgICAgICAsIGVycm9yKFdURk1vdmUoZXJyb3Ip
KSB7IH0KLQotICAgIEVycm9yIGVycm9yOwotICAgIHN0YXRpYyBjb25zdCBjaGFyIHR5cGVOYW1l
W107Ci19Owotc3RhdGljX2Fzc2VydChzdGQ6OmlzX21vdmVfY29uc3RydWN0aWJsZTxGaW5pc2hl
ZEV2ZW50Pjo6dmFsdWUsICJGaW5pc2hlZEV2ZW50IGlzIG5vdCBtb3ZlIGNvbnN0cnVjdGlibGUi
KTsKLXN0YXRpY19hc3NlcnQoc3RkOjppc19tb3ZlX2Fzc2lnbmFibGU8RmluaXNoZWRFdmVudD46
OnZhbHVlLCAiRmluaXNoZWRFdmVudCBpcyBub3QgbW92ZSBhc3NpZ25hYmxlIik7Ci0KLX0gLy8g
bmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVMb2dnaW5nLmggYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVMb2dnaW5nLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNTNkM2YxYTdlMTdmYTJkYWI1ZDNmYTI2ZGRmOTBi
YTJlOTc4NTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTG9nZ2lu
Zy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKLQotI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKLQotI2RlZmluZSBDQVBUVVJFX0lOVEVSTkFMX0RFQlVHR0lORyAwCi0jZGVmaW5lIFZFUkJP
U0VfQ0FQVFVSRV9JTlRFUk5BTF9ERUJVR0dJTkcgMAotCi0jZGVmaW5lIERFQlVHX1NUUihzKSAg
ICAgICAgICAgICAgICAgICAgKHMpLmFzY2lpKCkuZGF0YSgpCi0KLSNpZiBSRUxFQVNFX0xPR19E
SVNBQkxFRAotI2RlZmluZSBTVFJJTkdfU1BFQ0lGSUVSICAgICAgICAgICAgICAgICIlcyIKLSNl
bHNlCi0jZGVmaW5lIFNUUklOR19TUEVDSUZJRVIgICAgICAgICAgICAgICAgIiV7cHVibGljfXMi
Ci0jZW5kaWYKLQotI2lmIENBUFRVUkVfSU5URVJOQUxfREVCVUdHSU5HCi0jZGVmaW5lIERFQlVH
X0xPR19RVU9URShzdHIpICAgICAgICAgICAgI3N0cgotI2RlZmluZSBERUJVR19MT0dfRVhQQU5E
X0FORF9RVU9URShzdHIpIERFQlVHX0xPR19RVU9URShzdHIpCi0jZGVmaW5lIERFQlVHX0xPRyhm
b3JtYXQsIC4uLikgICAgICAgICAgUkVMRUFTRV9MT0coTmV0d29yaywgIiNQTFQ6ICVwIC0gIiBT
VFJJTkdfU1BFQ0lGSUVSICI6OiIgU1RSSU5HX1NQRUNJRklFUiAiOiAiIGZvcm1hdCwgdGhpcywg
REVCVUdfTE9HX0VYUEFORF9BTkRfUVVPVEUoREVCVUdfQ0xBU1MpLCBfX0ZVTkNUSU9OX18sICMj
X19WQV9BUkdTX18pCi0jZGVmaW5lIERFQlVHX0xPR19FUlJPUihmb3JtYXQsIC4uLikgICAgUkVM
RUFTRV9MT0dfRVJST1IoTmV0d29yaywgIiNQTFQ6ICVwIC0gIiBTVFJJTkdfU1BFQ0lGSUVSICI6
OiIgU1RSSU5HX1NQRUNJRklFUiAiOiAiIGZvcm1hdCwgdGhpcywgREVCVUdfTE9HX0VYUEFORF9B
TkRfUVVPVEUoREVCVUdfQ0xBU1MpLCBfX0ZVTkNUSU9OX18sICMjX19WQV9BUkdTX18pCi0jaWYg
VkVSQk9TRV9DQVBUVVJFX0lOVEVSTkFMX0RFQlVHR0lORwotI2RlZmluZSBERUJVR19MT0dfVkVS
Qk9TRShmb3JtYXQsIC4uLikgIERFQlVHX0xPRyhmb3JtYXQsICMjX19WQV9BUkdTX18pCi0jZWxz
ZQotI2RlZmluZSBERUJVR19MT0dfVkVSQk9TRSguLi4pICAgICAgICAgICgodm9pZCkwKQotI2Vu
ZGlmCi0jZWxzZQotI2RlZmluZSBERUJVR19MT0coLi4uKSAgICAgICAgICAgICAgICAgICgodm9p
ZCkwKQotI2RlZmluZSBERUJVR19MT0dfRVJST1IoLi4uKSAgICAgICAgICAgIFJFTEVBU0VfTE9H
X0VSUk9SKE5ldHdvcmssIF9fVkFfQVJHU19fKQotI2RlZmluZSBERUJVR19MT0dfVkVSQk9TRSgu
Li4pICAgICAgICAgICgodm9pZCkwKQotI2VuZGlmCi0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUV09S
S19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtDYXB0dXJlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZDU2NWE0ZWEzNzcxZTQ2Mzc5NzNmNzE5Y2ExOThhMjhjNTU3ZTBmNC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDU4NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTWFuYWdlci5oIgotCi0jaWYgRU5BQkxFKE5FVFdP
UktfQ0FQVFVSRSkKLQotI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oIgotI2luY2x1
ZGUgIk5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNl
UmVxdWVzdC5oPgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpdGVyYXRvcj4KLSNp
bmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8d3RmL01ENS5oPgotI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9VUkwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9C
YXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLSNkZWZpbmUg
REVCVUdfQ0xBU1MgTWFuYWdlcgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3
b3JrQ2FwdHVyZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpGaWxlU3lzdGVtOwotCi1z
dGF0aWMgY29uc3QgY2hhcioga0Rpck5hbWVSZWNvcmRSZXBsYXkgPSAiV2ViS2l0UGVyZi9yZWNv
cmRfcmVwbGF5IjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrRGlyTmFtZVJlc291cmNlcyA9ICJyZXNv
dXJjZXMiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtGaWxlTmFtZVJlcG9ydExvYWQgPSAicmVwb3J0
X2xvYWQudHh0IjsKLXN0YXRpYyBjb25zdCBjaGFyKiBrRmlsZU5hbWVSZXBvcnRSZWNvcmQgPSAi
cmVwb3J0X3JlY29yZC50eHQiOwotc3RhdGljIGNvbnN0IGNoYXIqIGtGaWxlTmFtZVJlcG9ydFJl
cGxheSA9ICJyZXBvcnRfcmVwbGF5LnR4dCI7Ci0KLXN0YXRpYyBpbnQga01heE1hdGNoID0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLXN0YXRpYyBpbnQga01pbk1hdGNoID0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKLQotTWFuYWdlciYgTWFuYWdlcjo6c2luZ2xl
dG9uKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWFuYWdlcj4gaW5zdGFuY2U7Ci0g
ICAgcmV0dXJuIGluc3RhbmNlOwotfQotCi12b2lkIE1hbmFnZXI6OmluaXRpYWxpemUoY29uc3Qg
U3RyaW5nJiByZWNvcmRSZXBsYXlNb2RlLCBjb25zdCBTdHJpbmcmIHJlY29yZFJlcGxheUNhY2hl
TG9jYXRpb24pCi17Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UocmVjb3JkUmVwbGF5
TW9kZSwgInJlY29yZCIpKSB7Ci0gICAgICAgIERFQlVHX0xPRygiSW5pdGlhbGl6aW5nOiByZWNv
cmRpbmcgbW9kZSIpOwotICAgICAgICBtX3JlY29yZFJlcGxheU1vZGUgPSBSZWNvcmQ7Ci0gICAg
fSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKHJlY29yZFJlcGxheU1vZGUsICJyZXBs
YXkiKSkgewotICAgICAgICBERUJVR19MT0coIkluaXRpYWxpemluZzogcmVwbGF5IG1vZGUiKTsK
LSAgICAgICAgbV9yZWNvcmRSZXBsYXlNb2RlID0gUmVwbGF5OwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIERFQlVHX0xPRygiSW5pdGlhbGl6aW5nOiBkaXNhYmxlZCIpOwotICAgICAgICBtX3JlY29y
ZFJlcGxheU1vZGUgPSBEaXNhYmxlZDsKLSAgICB9Ci0KLSAgICBtX3JlY29yZFJlcGxheUNhY2hl
TG9jYXRpb24gPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocmVjb3JkUmVwbGF5Q2FjaGVMb2Nh
dGlvbiwga0Rpck5hbWVSZWNvcmRSZXBsYXkpOwotICAgIERFQlVHX0xPRygiQ2FjaGUgbG9jYXRp
b24gPSAiIFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NUUihtX3JlY29yZFJlcGxheUNhY2hlTG9j
YXRpb24pKTsKLQotICAgIGlmIChpc1JlY29yZGluZygpKSB7Ci0gICAgICAgIG1fcmVjb3JkRmls
ZUhhbmRsZSA9IFdlYkNvcmU6OkZpbGVIYW5kbGUocmVwb3J0UmVjb3JkUGF0aCgpLCBGaWxlT3Bl
bk1vZGU6OldyaXRlKTsKLSAgICB9IGVsc2UgaWYgKGlzUmVwbGF5aW5nKCkpIHsKLSAgICAgICAg
bV9yZWNvcmRGaWxlSGFuZGxlID0gV2ViQ29yZTo6RmlsZUhhbmRsZShyZXBvcnRSZWNvcmRQYXRo
KCksIEZpbGVPcGVuTW9kZTo6UmVhZCk7Ci0gICAgICAgIG1fbG9hZEZpbGVIYW5kbGUgPSBXZWJD
b3JlOjpGaWxlSGFuZGxlKHJlcG9ydExvYWRQYXRoKCksIEZpbGVPcGVuTW9kZTo6V3JpdGUpOwot
ICAgICAgICBtX3JlcGxheUZpbGVIYW5kbGUgPSBXZWJDb3JlOjpGaWxlSGFuZGxlKHJlcG9ydFJl
cGxheVBhdGgoKSwgRmlsZU9wZW5Nb2RlOjpXcml0ZSk7Ci0gICAgICAgIGxvYWRSZXNvdXJjZXMo
KTsKLSAgICB9Ci19Ci0KLXZvaWQgTWFuYWdlcjo6dGVybWluYXRlKCkKLXsKLSAgICBtX2xvYWRG
aWxlSGFuZGxlLmNsb3NlKCk7Ci0gICAgbV9yZWNvcmRGaWxlSGFuZGxlLmNsb3NlKCk7Ci0gICAg
bV9yZXBsYXlGaWxlSGFuZGxlLmNsb3NlKCk7Ci19Ci0KLVJlc291cmNlKiBNYW5hZ2VyOjpmaW5k
TWF0Y2goY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIERF
QlVHX0xPR19WRVJCT1NFKCJVUkwgPSAiIFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NUUihyZXF1
ZXN0LnVybCgpLnN0cmluZygpKSk7Ci0KLSAgICBhdXRvIGJlc3RNYXRjaCA9IGZpbmRFeGFjdE1h
dGNoKHJlcXVlc3QpOwotICAgIGlmICghYmVzdE1hdGNoKQotICAgICAgICBiZXN0TWF0Y2ggPSBm
aW5kQmVzdEZ1enp5TWF0Y2gocmVxdWVzdCk7Ci0KLSNpZiBDQVBUVVJFX0lOVEVSTkFMX0RFQlVH
R0lORwotICAgIGlmICghYmVzdE1hdGNoKQotICAgICAgICBERUJVR19MT0coIkNvdWxkIG5vdCBm
aW5kIG1hdGNoIGZvcjogIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIocmVxdWVzdC51cmwo
KS5zdHJpbmcoKSkpOwotICAgIGVsc2UgaWYgKHJlcXVlc3QudXJsKCkgPT0gYmVzdE1hdGNoLT51
cmwoKSkKLSAgICAgICAgREVCVUdfTE9HKCJGb3VuZCBleGFjdCBtYXRjaCBmb3I6ICIgU1RSSU5H
X1NQRUNJRklFUiwgREVCVUdfU1RSKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgREVCVUdfTE9HKCJGb3VuZCBmdXp6eSBtYXRjaCBmb3I6ICIgU1RSSU5HX1NQ
RUNJRklFUiwgREVCVUdfU1RSKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKLSAgICAgICAgREVC
VUdfTE9HKCIgICAgICAgcmVwbGFjZWQgd2l0aCA6ICIgU1RSSU5HX1NQRUNJRklFUiwgREVCVUdf
U1RSKGJlc3RNYXRjaC0+dXJsKCkuc3RyaW5nKCkpKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJl
dHVybiBiZXN0TWF0Y2g7Ci19Ci0KLVJlc291cmNlKiBNYW5hZ2VyOjpmaW5kRXhhY3RNYXRjaChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCi17Ci0gICAgY29uc3QgYXV0
byYgdXJsID0gcmVxdWVzdC51cmwoKTsKLSAgICBhdXRvIGxvd2VyID0gc3RkOjpsb3dlcl9ib3Vu
ZChzdGQ6OmJlZ2luKG1fY2FjaGVkUmVzb3VyY2VzKSwgc3RkOjplbmQobV9jYWNoZWRSZXNvdXJj
ZXMpLCB1cmwsIFtdKGF1dG8mIHJlc291cmNlLCBjb25zdCBhdXRvJiB1cmwpIHsKLSAgICAgICAg
cmV0dXJuIFdURjo6Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKHJlc291cmNlLnVybCgpLnN0cmlu
ZygpLCB1cmwuc3RyaW5nKCkpOwotICAgIH0pOwotCi0gICAgaWYgKGxvd2VyICE9IHN0ZDo6ZW5k
KG1fY2FjaGVkUmVzb3VyY2VzKSAmJiBsb3dlci0+dXJsKCkgPT0gdXJsKSB7Ci0gICAgICAgIERF
QlVHX0xPR19WRVJCT1NFKCJGb3VuZCBleGFjdCBtYXRjaDogIiBTVFJJTkdfU1BFQ0lGSUVSLCBE
RUJVR19TVFIobG93ZXItPnVybCgpLnN0cmluZygpKSk7Ci0gICAgICAgIHJldHVybiAmKmxvd2Vy
OwotICAgIH0KLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1SZXNvdXJjZSogTWFuYWdlcjo6
ZmluZEJlc3RGdXp6eU1hdGNoKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKLXsKLSAgICBjb25zdCBhdXRvJiB1cmwgPSByZXF1ZXN0LnVybCgpOwotICAgIGNvbnN0IGF1
dG8mIHVybElkZW50aWZ5aW5nQ29tbW9uRG9tYWluID0gTWFuYWdlcjo6dXJsSWRlbnRpZnlpbmdD
b21tb25Eb21haW4odXJsKTsKLQotICAgIGNvbnN0IGF1dG8mIGxvd2VyID0gc3RkOjpsb3dlcl9i
b3VuZChzdGQ6OmJlZ2luKG1fY2FjaGVkUmVzb3VyY2VzKSwgc3RkOjplbmQobV9jYWNoZWRSZXNv
dXJjZXMpLCB1cmxJZGVudGlmeWluZ0NvbW1vbkRvbWFpbiwgW10oYXV0byYgcmVzb3VyY2UsIGNv
bnN0IGF1dG8mIHVybElkZW50aWZ5aW5nQ29tbW9uRG9tYWluKSB7Ci0gICAgICAgIHJldHVybiBX
VEY6OmNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihyZXNvdXJjZS51cmxJZGVudGlmeWluZ0NvbW1v
bkRvbWFpbigpLCB1cmxJZGVudGlmeWluZ0NvbW1vbkRvbWFpbik7Ci0gICAgfSk7Ci0gICAgY29u
c3QgYXV0byYgdXBwZXIgPSBzdGQ6OnVwcGVyX2JvdW5kKGxvd2VyLCBzdGQ6OmVuZChtX2NhY2hl
ZFJlc291cmNlcyksIHVybElkZW50aWZ5aW5nQ29tbW9uRG9tYWluLCBbXShjb25zdCBhdXRvJiB1
cmxJZGVudGlmeWluZ0NvbW1vbkRvbWFpbiwgYXV0byYgcmVzb3VyY2UpIHsKLSAgICAgICAgcmV0
dXJuIFdURjo6Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKHVybElkZW50aWZ5aW5nQ29tbW9uRG9t
YWluLCByZXNvdXJjZS51cmxJZGVudGlmeWluZ0NvbW1vbkRvbWFpbigpKTsKLSAgICB9KTsKLQot
ICAgIFJlc291cmNlKiBiZXN0TWF0Y2ggPSBudWxscHRyOwotICAgIGludCBiZXN0U2NvcmUgPSBr
TWluTWF0Y2g7Ci0gICAgY29uc3QgYXV0byYgcmVxdWVzdFBhcmFtZXRlcnMgPSBXVEY6OlVSTFBh
cnNlcjo6cGFyc2VVUkxFbmNvZGVkRm9ybSh1cmwucXVlcnkoKSk7Ci0gICAgZm9yIChhdXRvIGlS
ZXNvdXJjZSA9IGxvd2VyOyBpUmVzb3VyY2UgIT0gdXBwZXI7ICsraVJlc291cmNlKSB7Ci0gICAg
ICAgIGludCB0aGlzU2NvcmUgPSBmdXp6eU1hdGNoVVJMcyh1cmwsIHJlcXVlc3RQYXJhbWV0ZXJz
LCBpUmVzb3VyY2UtPnVybCgpLCBpUmVzb3VyY2UtPnF1ZXJ5UGFyYW1ldGVycygpKTsKLSAgICAg
ICAgLy8gVE9ETzogQ29uc2lkZXIgaWdub3JpbmcgYW55IG1hdGNoZXMgPCAwIGFzIGJlaW5nIHRv
byBkaWZmZXJlbnQuCi0gICAgICAgIGlmIChiZXN0U2NvcmUgPCB0aGlzU2NvcmUpIHsKLSAgICAg
ICAgICAgIERFQlVHX0xPRygiTmV3IGJlc3QgbWF0Y2ggKCVkKTogIiBTVFJJTkdfU1BFQ0lGSUVS
LCB0aGlzU2NvcmUsIERFQlVHX1NUUihpUmVzb3VyY2UtPnVybCgpLnN0cmluZygpKSk7Ci0gICAg
ICAgICAgICBiZXN0U2NvcmUgPSB0aGlzU2NvcmU7Ci0gICAgICAgICAgICBiZXN0TWF0Y2ggPSAm
KmlSZXNvdXJjZTsKLSAgICAgICAgICAgIGlmIChiZXN0U2NvcmUgPT0ga01heE1hdGNoKQotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGJlc3RN
YXRjaDsKLX0KLQotLy8gVE9ETzogQ29udmVydCB0byBhbiBpbnRlcmZhY2UgYmFzZWQgb24gUmVz
b3VyY2VSZXF1ZXN0IHNvIHRoYXQgd2UgY2FuIGRvCi0vLyBkZWVwZXIgbWF0Y2hpbmcuCi0KLWlu
dCBNYW5hZ2VyOjpmdXp6eU1hdGNoVVJMcyhjb25zdCBVUkwmIHJlcXVlc3RVUkwsIGNvbnN0IFdU
Rjo6VVJMUGFyc2VyOjpVUkxFbmNvZGVkRm9ybSYgcmVxdWVzdFBhcmFtZXRlcnMsIGNvbnN0IFVS
TCYgcmVzb3VyY2VVUkwsIGNvbnN0IFdURjo6VVJMUGFyc2VyOjpVUkxFbmNvZGVkRm9ybSYgcmVz
b3VyY2VQYXJhbWV0ZXJzKQotewotICAgIC8vIFRPRE86IGNvbnNpZGVyIHJlcXVpcmluZyB0aGF0
IGFueSB0cmFpbGluZyBzdWZmaXhlcyAoZS5nLiwgIi5qcyIsCi0gICAgLy8gIi5wbmciLCAiLmNz
cyIsICIuaHRtbCIsIGV0Yy4pIHNob3VsZCBiZSBhbiBleGFjdCBtYXRjaC4KLQotICAgIC8vIFdl
IGRvIGZ1enp5IG1hdGNoaW5nIG9uIHRoZSBwYXRoIGFuZCBxdWVyeSBwYXJhbWV0ZXJzLiBTbyBs
ZXQncyBmaXJzdAotICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aGUgb3RoZXIgcGFydHMgYXJl
IGVxdWFsLgotCi0gICAgLy8gSWYgc2NoZW1lLCBob3N0LCBhbmQgcG9ydCBkb24ndCBhbGwgbWF0
Y2gsIHJldHVybiB0aGlzIGFzIHRoZSAid29yc3QiCi0gICAgLy8gbWF0Y2guCi0KLSAgICBpZiAo
IXByb3RvY29sSG9zdEFuZFBvcnRBcmVFcXVhbChyZXF1ZXN0VVJMLCByZXNvdXJjZVVSTCkpIHsK
LSAgICAgICAgREVCVUdfTE9HKCJTY2hlbWUvaG9zdC9wb3J0IG1pc21hdGNoOiAiIFNUUklOR19T
UEVDSUZJRVIgIiAhPSAiIFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NUUihyZXF1ZXN0VVJMLnN0
cmluZygpKSwgREVCVUdfU1RSKHJlc291cmNlVVJMLnN0cmluZygpKSk7Ci0gICAgICAgIHJldHVy
biBrTWluTWF0Y2g7Ci0gICAgfQotCi0gICAgLy8gSWYgZnJhZ21lbnRzIGRvbid0IG1hdGNoLCBy
ZXR1cm4gdGhpcyBhcyB0aGUgIndvcnN0IiBtYXRjaC4KLQotICAgIGlmIChyZXF1ZXN0VVJMLmZy
YWdtZW50SWRlbnRpZmllcigpICE9IHJlc291cmNlVVJMLmZyYWdtZW50SWRlbnRpZmllcigpKSB7
Ci0gICAgICAgIERFQlVHX0xPRygiRnJhZ21lbnRzIG1pc21hdGNoOiAiIFNUUklOR19TUEVDSUZJ
RVIgIiAhPSAiIFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NUUihyZXF1ZXN0VVJMLnN0cmluZygp
KSwgREVCVUdfU1RSKHJlc291cmNlVVJMLnN0cmluZygpKSk7Ci0gICAgICAgIHJldHVybiBrTWlu
TWF0Y2g7Ci0gICAgfQotCi0gICAgREVCVUdfTE9HKCJGdXp6eSBtYXRjaGluZzoiKTsKLSAgICBE
RUJVR19MT0coIiAgIDogIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIocmVxdWVzdFVSTC5z
dHJpbmcoKSkpOwotICAgIERFQlVHX0xPRygiICAgOiAiIFNUUklOR19TUEVDSUZJRVIsIERFQlVH
X1NUUihyZXNvdXJjZVVSTC5zdHJpbmcoKSkpOwotCi0gICAgLy8gQ29tcGFyZSB0aGUgcGF0aCBj
b21wb25lbnRzIGFuZCB0aGUgcXVlcnkgcGFyYW1ldGVycy4gU2NvcmUgZWFjaCBwYXJ0aWFsCi0g
ICAgLy8gbWF0Y2ggYXMgKzQsIGVhY2ggbWlzbWF0Y2ggYXMgLTEsIGFuZCBlYWNoIG1pc3Npbmcg
Y29tcG9uZW50IGFzIC0xLgotICAgIC8vCi0gICAgLy8gTm90ZSB0aGF0IGF0IHRoZSBjdXJyZW50
IHRpbWUgdGhlc2UgdmFsdWVzIGFyZSByYXRoZXIgYXJiaXRyYXJ5IGFuZAotICAgIC8vIGNvdWxk
IGZpbmUtdHVuZWQuCi0KLSAgICBjb25zdCBpbnQga1BhdGhNYXRjaFNjb3JlID0gNDsKLSAgICBj
b25zdCBpbnQga1BhdGhNaXNtYXRjaFNjb3JlID0gLTE7Ci0gICAgY29uc3QgaW50IGtQYXRoTWlz
c2luZ1Njb3JlID0gLTE7Ci0gICAgY29uc3QgaW50IGtQYXJhbWV0ZXJNYXRjaFNjb3JlID0gNDsK
LSAgICBjb25zdCBpbnQga1BhcmFtZXRlck1pc21hdGNoU2NvcmUgPSAtMTsKLSAgICBjb25zdCBp
bnQga1BhcmFtZXRlck1pc3NpbmdTY29yZSA9IC0xOwotCi0gICAgaW50IHNjb3JlID0gMDsKLQot
ICAgIC8vIFF1YW50aXplIHRoZSBkaWZmZXJlbmNlcyBpbiBVUkwgcGF0aHMuCi0gICAgLy8KLSAg
ICAvLyBUaGUgYXBwcm9hY2ggaGVyZSBpcyB0byBpbmNyZWFzZSBvdXIgc2NvcmUgZm9yIGVhY2gg
bWF0Y2hpbmcgcGF0aAotICAgIC8vIGNvbXBvbmVudCwgYW5kIHRvIHN1YnRyYWN0IGZvciBlYWNo
IGRpZmZlcmluZyBjb21wb25lbnQgYXMgd2VsbCBhcyBmb3IKLSAgICAvLyBjb21wb25lbnRzIHRo
YXQgZXhpc3QgaW4gb25lIHBhdGggYnV0IG5vdCB0aGUgb3RoZXIuCi0KLSAgICBjb25zdCBhdXRv
JiByZXF1ZXN0UGF0aCA9IHJlcXVlc3RVUkwucGF0aCgpOwotICAgIGNvbnN0IGF1dG8mIHJlc291
cmNlUGF0aCA9IHJlc291cmNlVVJMLnBhdGgoKTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHJlcXVl
c3RQYXRoQ29tcG9uZW50cyA9IHJlcXVlc3RQYXRoLnNwbGl0KCcvJyk7Ci0gICAgVmVjdG9yPFN0
cmluZz4gcmVzb3VyY2VQYXRoQ29tcG9uZW50cyA9IHJlc291cmNlUGF0aC5zcGxpdCgnLycpOwot
Ci0gICAgYXV0byB1cGRhdGVkSXRlcmF0b3JzID0gc3RkOjptaXNtYXRjaCgKLSAgICAgICAgc3Rk
OjpiZWdpbihyZXF1ZXN0UGF0aENvbXBvbmVudHMpLCBzdGQ6OmVuZChyZXF1ZXN0UGF0aENvbXBv
bmVudHMpLAotICAgICAgICBzdGQ6OmJlZ2luKHJlc291cmNlUGF0aENvbXBvbmVudHMpLCBzdGQ6
OmVuZChyZXNvdXJjZVBhdGhDb21wb25lbnRzKSk7Ci0KLSAgICBhdXRvIG1hdGNoaW5nRGlzdGFu
Y2UgPSBzdGQ6OmRpc3RhbmNlKHN0ZDo6YmVnaW4ocmVxdWVzdFBhdGhDb21wb25lbnRzKSwgdXBk
YXRlZEl0ZXJhdG9ycy5maXJzdCk7Ci0gICAgYXV0byByZXF1ZXN0UGF0aE1pc21hdGNoRGlzdGFu
Y2UgPSBzdGQ6OmRpc3RhbmNlKHVwZGF0ZWRJdGVyYXRvcnMuZmlyc3QsIHN0ZDo6ZW5kKHJlcXVl
c3RQYXRoQ29tcG9uZW50cykpOwotICAgIGF1dG8gcmVzb3VyY2VQYXRoTWlzbWF0Y2hEaXN0YW5j
ZSA9IHN0ZDo6ZGlzdGFuY2UodXBkYXRlZEl0ZXJhdG9ycy5zZWNvbmQsIHN0ZDo6ZW5kKHJlc291
cmNlUGF0aENvbXBvbmVudHMpKTsKLSAgICBkZWNsdHlwZShtYXRjaGluZ0Rpc3RhbmNlKSBtaXNt
YXRjaGluZ0Rpc3RhbmNlOwotICAgIGRlY2x0eXBlKG1hdGNoaW5nRGlzdGFuY2UpIG1pc3NpbmdE
aXN0YW5jZTsKLSAgICBpZiAocmVxdWVzdFBhdGhNaXNtYXRjaERpc3RhbmNlIDwgcmVzb3VyY2VQ
YXRoTWlzbWF0Y2hEaXN0YW5jZSkgewotICAgICAgICBtaXNtYXRjaGluZ0Rpc3RhbmNlID0gcmVx
dWVzdFBhdGhNaXNtYXRjaERpc3RhbmNlOwotICAgICAgICBtaXNzaW5nRGlzdGFuY2UgPSByZXNv
dXJjZVBhdGhNaXNtYXRjaERpc3RhbmNlIC0gcmVxdWVzdFBhdGhNaXNtYXRjaERpc3RhbmNlOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIG1pc21hdGNoaW5nRGlzdGFuY2UgPSByZXNvdXJjZVBhdGhN
aXNtYXRjaERpc3RhbmNlOwotICAgICAgICBtaXNzaW5nRGlzdGFuY2UgPSByZXF1ZXN0UGF0aE1p
c21hdGNoRGlzdGFuY2UgLSByZXNvdXJjZVBhdGhNaXNtYXRjaERpc3RhbmNlOwotICAgIH0KLQot
ICAgIERFQlVHX0xPRygiUGF0aCBtYXRjaGluZyByZXN1bHRzOiBtYXRjaGluZyA9ICVkLCBtaXNt
YXRjaGluZyA9ICVkLCBtaXNzaW5nID0gJWQiLAotICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG1h
dGNoaW5nRGlzdGFuY2UpLAotICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG1pc21hdGNoaW5nRGlz
dGFuY2UpLAotICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG1pc3NpbmdEaXN0YW5jZSkpOwotCi0g
ICAgc2NvcmUgKz0gbWF0Y2hpbmdEaXN0YW5jZSAqIGtQYXRoTWF0Y2hTY29yZQotICAgICAgICAr
IG1pc21hdGNoaW5nRGlzdGFuY2UgKiBrUGF0aE1pc21hdGNoU2NvcmUKLSAgICAgICAgKyBtaXNz
aW5nRGlzdGFuY2UgKiBrUGF0aE1pc3NpbmdTY29yZTsKLSAgICBERUJVR19MT0coIlNjb3JlID0g
JWQiLCBzY29yZSk7Ci0KLSAgICAvLyBRdWFudGl6ZSB0aGUgZGlmZmVyZW5jZXMgaW4gcXVlcnkg
cGFyYW1ldGVycy4KLSAgICAvLwotICAgIC8vIFRoZSBhcHByb2FjaCBoZXJlIGlzIHRvIHdhbGsg
bG9jay1zdGVwIG92ZXIgdGhlIHR3byBzZXRzIG9mIHF1ZXJ5Ci0gICAgLy8gcGFyYW1ldGVycy4g
Rm9yIGVhY2ggcGFpciBvZiBwYXJhbWV0ZXJzIGZvciBlYWNoIFVSTCwgd2UgY29tcGFyZSB0aGVp
cgotICAgIC8vIG5hbWVzIGFuZCB2YWx1ZXMuIElmIHRoZSBuYW1lcyBhbmQgdmFsdWVzIG1hdGNo
LCB3ZSBhZGQgYSBoaWdoIHNjb3JlLiBJZgotICAgIC8vIGp1c3QgdGhlIG5hbWVzIG1hdGNoLCB3
ZSBhZGQgYSBsb3dlciBzY29yZS4KLSAgICAvLwotICAgIC8vIElmIHRoZSBuYW1lcyBkb24ndCBt
YXRjaCwgd2UgdGhlbiBhc3N1bWUgdGhhdCBzb21lIGludGVydmVuaW5nIHF1ZXJ5Ci0gICAgLy8g
cGFyYW1ldGVycyBoYXZlIGJlZW4gYWRkZWQgdG8gb25lIG9yIHRoZSBvdGhlciBVUkwuIFdlIHRo
ZXJlZm9yZSB0cnkgdG8KLSAgICAvLyBzeW5jIHVwIHRoZSBpdGVyYXRvcnMgdXNlZCB0byB0cmF2
ZXJzZSB0aGUgcXVlcnkgcGFyYW1ldGVyIGNvbGxlY3Rpb25zCi0gICAgLy8gc28gdGhhdCB0aGV5
J3JlIGFnYWluIHBvaW50aW5nIHRvIHBhcmFtZXRlcnMgd2l0aCB0aGUgc2FtZSBuYW1lcy4gV2UK
LSAgICAvLyBmaXJzdCBzdGFydCBzY2FubmluZyBmb3J3YXJkIGRvd24gdGhlIHF1ZXJ5IHBhcmFt
ZXRlcnMgZm9yIG9uZSBVUkwsCi0gICAgLy8gbG9va2luZyBmb3Igb25lIHdpdGggdGhlIHNhbWUg
bmFtZSBhcyB0aGUgb25lIHdlJ3JlIG9uIGluIHRoZSBvdGhlciBVUkwuCi0gICAgLy8gSWYgdGhh
dCBkb2Vzbid0IHR1cm4gdXAgYSBtYXRjaCwgd2UgcmV2ZXJzZSB0aGUgcm9sZXMgb2YgdGhlIHF1
ZXJ5Ci0gICAgLy8gcGFyYW1ldGVycyBwZXJmb3JtIHRoZSBzYW1lIHByb2Nlc3Mgb2Ygc2Nhbm5p
bmcgZm9yd2FyZC4gSWYgbmVpdGhlciBvZgotICAgIC8vIHRoZXNlIHNjYW5zIHByb2R1Y2VzIGEg
bWF0Y2gsIHdlIGZpZ3VyZSB0aGF0IGVhY2ggcXVlcnkgcGFyYW1ldGVyIHdlJ3JlCi0gICAgLy8g
bG9va2luZyBhdCBmcm9tIGVhY2ggb2YgdGhlIHF1ZXJ5IHBhcmFtZXRlciBjb2xsZWN0aW9ucyBp
cyB1bmlxdWUuIFdlCi0gICAgLy8gZGVkdWN0IHBvaW50cyBmcm9tIHRoZSBvdmVyYWxsIHNjb3Jl
IGFuZCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHF1ZXJ5Ci0gICAgLy8gcGFyYW1ldGVycyBpbiBlYWNo
IHNldC4KLSAgICAvLwotICAgIC8vIElmLCBvbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGZvcndhcmQt
c2Nhbm5pbmcgZG9lcyB0dXJuIHVwIGEgbWF0Y2gsIHdlCi0gICAgLy8gYWRqdXN0IG91dCBpdGVy
YXRvcnMgc28gdGhhdCB0aGV5J3JlIG5vdyBhZ2FpbiBwb2ludGluZyB0byBxdWVyeQotICAgIC8v
IHBhcmFtZXRlcnMgd2l0aCB0aGUgc2FtZSBuYW1lLiBUaGlzIHN5bmNocm9uaXphdGlvbiBpbnZv
bHZlcyBza2lwcGluZwotICAgIC8vIG92ZXIgYW55IGludGVydmVuaW5nIHF1ZXJ5IHBhcmFtZXRl
cnMgaW4gb25lIGNvbGxlY3Rpb24gb3IgdGhlIG90aGVyLgotICAgIC8vIFRoZSBhc3N1bXB0aW9u
IGhlcmUgaXMgdGhhdCB0aGVzZSBpbnRlcnZlbmluZyBxdWVyeSBwYXJhbWV0ZXJzIGFyZQotICAg
IC8vIGluc2VydGlvbnMgdGhhdCBleGlzdCBpbiBvbmUgVVJMIGJ1dCBub3QgdGhlIG90aGVyLiBX
ZSB0cmVhdCB0aGVtIGFzCi0gICAgLy8gc3VjaCwgc3VidHJhY3RpbmcgZnJvbSB0aGUgb3ZlcmFs
bCBzY29yZSBmb3IgZWFjaCBvbmUuIEhvd2V2ZXIsIHRoaXMKLSAgICAvLyBhc3N1bXB0aW9uIG1p
Z2h0IGVhc2lseSBiZSBpbmNvcnJlY3QuIEl0IG1pZ2h0IGJlIHRoYXQgdGhlIHF1ZXJ5Ci0gICAg
Ly8gcGFyYW1ldGVycyB0aGF0IHdlJ3JlIHNraXBwaW5nIG92ZXIgaW4gb25lIFVSTCBtaWdodCBl
eGlzdCBpbiB0aGUgb3RoZXIKLSAgICAvLyBVUkwuIElmIHNvLCB0aGVuIHdlIGFyZSBmb3JlZ29p
bmcgdGhlIHBvc3NpYmlsaXR5IG9mIHVzaW5nIHRob3NlIG1hdGNoZXMKLSAgICAvLyB0byBpbmNy
ZWFzZSB0aGUgb3ZlcmFsbCBtYXRjaCBzY29yZSBiZXR3ZWVuIHRoZSB0d28gVVJMcy4KLSAgICAv
LwotICAgIC8vIFRvIGFkZHJlc3MgdGhpcyBwcm9ibGVtLCB3ZSBtaWdodCB3YW50IHRvIGNvbnNp
ZGVyIHNvcnRpbmcgdGhlIHF1ZXJ5Ci0gICAgLy8gcGFyYW1ldGVycyBieSB0aGVpciBuYW1lcy4g
SG93ZXZlciwgZG9pbmcgdGhpcyBtYXkgY2F1c2UgcHJvYmxlbXMgaWYgdGhlCi0gICAgLy8gb3Jk
ZXIgb2YgdGhlIHBhcmFtZXRlcnMgaXMgc2lnbmlmaWNhbnQuIFNvIGlmIHdlIGRlY2lkZSB0byB0
YWtlIHRoZQotICAgIC8vIGFwcHJvYWNoIG9mIHNvcnRpbmcgdGhlIHBhcmFtZXRlcnMsIGtlZXAg
aW4gbWluZCB0aGlzIHBvc3NpYmxlIGRyYXdiYWNrLgotCi0gICAgYXV0byByZXF1ZXN0UGFyYW1l
dGVyID0gc3RkOjpiZWdpbihyZXF1ZXN0UGFyYW1ldGVycyk7Ci0gICAgYXV0byByZXNvdXJjZVBh
cmFtZXRlciA9IHN0ZDo6YmVnaW4ocmVzb3VyY2VQYXJhbWV0ZXJzKTsKLQotICAgIGZvciAoOyBy
ZXF1ZXN0UGFyYW1ldGVyICE9IHN0ZDo6ZW5kKHJlcXVlc3RQYXJhbWV0ZXJzKSAmJiByZXNvdXJj
ZVBhcmFtZXRlciAhPSBzdGQ6OmVuZChyZXNvdXJjZVBhcmFtZXRlcnMpOyArK3JlcXVlc3RQYXJh
bWV0ZXIsICsrcmVzb3VyY2VQYXJhbWV0ZXIpIHsKLSAgICAgICAgaWYgKHJlcXVlc3RQYXJhbWV0
ZXItPmtleSA9PSByZXNvdXJjZVBhcmFtZXRlci0+a2V5KSB7Ci0jaWYgQ0FQVFVSRV9JTlRFUk5B
TF9ERUJVR0dJTkcKLSAgICAgICAgICAgIGlmIChyZXF1ZXN0UGFyYW1ldGVyLT52YWx1ZSA9PSBy
ZXNvdXJjZVBhcmFtZXRlci0+dmFsdWUpCi0gICAgICAgICAgICAgICAgREVCVUdfTE9HKCJNYXRj
aGluZyBwYXJhbWV0ZXIgbmFtZXMgYW5kIHZhbHVlczogXCIiIFNUUklOR19TUEVDSUZJRVIgIlwi
ID0gXCIiIFNUUklOR19TUEVDSUZJRVIgIlwiIiwgREVCVUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXIt
PmZpcnN0KSwgREVCVUdfU1RSKHJlcXVlc3RQYXJhbWV0ZXItPnNlY29uZCkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIERFQlVHX0xPRygiTWlzbWF0Y2hpbmcgcGFyYW1ldGVy
IHZhbHVlczogXCIiIFNUUklOR19TUEVDSUZJRVIgIlwiID0gXCIiIFNUUklOR19TUEVDSUZJRVIg
IlwiIHZzLiBcIiIgU1RSSU5HX1NQRUNJRklFUiAiXCIiLCBERUJVR19TVFIocmVxdWVzdFBhcmFt
ZXRlci0+Zmlyc3QpLCBERUJVR19TVFIocmVxdWVzdFBhcmFtZXRlci0+c2Vjb25kKSwgREVCVUdf
U1RSKHJlc291cmNlUGFyYW1ldGVyLT5zZWNvbmQpKTsKLSNlbmRpZgotICAgICAgICAgICAgc2Nv
cmUgKz0gKHJlcXVlc3RQYXJhbWV0ZXItPnZhbHVlID09IHJlc291cmNlUGFyYW1ldGVyLT52YWx1
ZSkgPyBrUGFyYW1ldGVyTWF0Y2hTY29yZSA6IGtQYXJhbWV0ZXJNaXNtYXRjaFNjb3JlOwotICAg
ICAgICAgICAgREVCVUdfTE9HKCJTY29yZSA9ICVkIiwgc2NvcmUpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgREVCVUdfTE9HKCJNaXNtYXRjaGluZyBwYXJhbWV0ZXIgbmFtZXM6ICIg
U1RSSU5HX1NQRUNJRklFUiAiLCAiIFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NUUihyZXF1ZXN0
UGFyYW1ldGVyLT5maXJzdCksIERFQlVHX1NUUihyZXNvdXJjZVBhcmFtZXRlci0+Zmlyc3QpKTsK
LQotICAgICAgICAgICAgY29uc3QgYXV0byBzY2FuRm9yd2FyZEZvck1hdGNoID0gWyZzY29yZSwg
a1BhcmFtZXRlck1hdGNoU2NvcmUsIGtQYXJhbWV0ZXJNaXNtYXRjaFNjb3JlLCBrUGFyYW1ldGVy
TWlzc2luZ1Njb3JlXShjb25zdCBhdXRvJiBmaXhlZEl0ZXIsIGF1dG8mIHNjYW5uaW5nSXRlciwg
Y29uc3QgYXV0byYgc2Nhbm5lckVuZCkgewotICAgICAgICAgICAgICAgIGF1dG8gc2Nhbm5lciA9
IHNjYW5uaW5nSXRlcjsKLSAgICAgICAgICAgICAgICB3aGlsZSAoc2Nhbm5lciAhPSBzY2FubmVy
RW5kICYmIHNjYW5uZXItPmtleSAhPSBmaXhlZEl0ZXItPmtleSkKLSAgICAgICAgICAgICAgICAg
ICAgKytzY2FubmVyOwotICAgICAgICAgICAgICAgIGlmIChzY2FubmVyID09IHNjYW5uZXJFbmQp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICBERUJV
R19MT0coIlNraXBwaW5nIHBhc3QgJWQgbm9uLW1hdGNoaW5nIHBhcmFtZXRlciBuYW1lcyIsIHN0
YXRpY19jYXN0PGludD4oc3RkOjpkaXN0YW5jZShzY2FubmluZ0l0ZXIsIHNjYW5uZXIpKSk7Ci0g
ICAgICAgICAgICAgICAgc2NvcmUgKz0ga1BhcmFtZXRlck1pc3NpbmdTY29yZSAqIHN0ZDo6ZGlz
dGFuY2Uoc2Nhbm5pbmdJdGVyLCBzY2FubmVyKTsKLSAgICAgICAgICAgICAgICBERUJVR19MT0co
IlNjb3JlID0gJWQiLCBzY29yZSk7Ci0jaWYgQ0FQVFVSRV9JTlRFUk5BTF9ERUJVR0dJTkcKLSAg
ICAgICAgICAgICAgICBpZiAoZml4ZWRJdGVyLT5zZWNvbmQgPT0gc2Nhbm5lci0+c2Vjb25kKQot
ICAgICAgICAgICAgICAgICAgICBERUJVR19MT0coIk1hdGNoaW5nIHBhcmFtZXRlciBuYW1lcyBh
bmQgdmFsdWVzOiBcIiIgU1RSSU5HX1NQRUNJRklFUiAiXCIgPSBcIiIgU1RSSU5HX1NQRUNJRklF
UiAiXCIiLCBERUJVR19TVFIoZml4ZWRJdGVyLT5maXJzdCksIERFQlVHX1NUUihmaXhlZEl0ZXIt
PnNlY29uZCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgREVC
VUdfTE9HKCJNaXNtYXRjaGluZyBwYXJhbWV0ZXIgdmFsdWVzOiBcIiIgU1RSSU5HX1NQRUNJRklF
UiAiXCIgPSBcIiIgU1RSSU5HX1NQRUNJRklFUiAiXCIgdnMuIFwiIiBTVFJJTkdfU1BFQ0lGSUVS
ICJcIiIsIERFQlVHX1NUUihmaXhlZEl0ZXItPmZpcnN0KSwgREVCVUdfU1RSKGZpeGVkSXRlci0+
c2Vjb25kKSwgREVCVUdfU1RSKHNjYW5uZXItPnNlY29uZCkpOwotI2VuZGlmCi0gICAgICAgICAg
ICAgICAgc2NvcmUgKz0gKGZpeGVkSXRlci0+dmFsdWUgPT0gc2Nhbm5lci0+dmFsdWUpID8ga1Bh
cmFtZXRlck1hdGNoU2NvcmUgOiBrUGFyYW1ldGVyTWlzbWF0Y2hTY29yZTsKLSAgICAgICAgICAg
ICAgICBERUJVR19MT0coIlNjb3JlID0gJWQiLCBzY29yZSk7Ci0gICAgICAgICAgICAgICAgc2Nh
bm5pbmdJdGVyID0gc2Nhbm5lcjsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH07Ci0KLSAgICAgICAgICAgIGlmICghc2NhbkZvcndhcmRGb3JNYXRjaChyZXF1ZXN0
UGFyYW1ldGVyLCByZXNvdXJjZVBhcmFtZXRlciwgc3RkOjplbmQocmVzb3VyY2VQYXJhbWV0ZXJz
KSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNjYW5Gb3J3YXJkRm9yTWF0Y2gocmVzb3VyY2VQ
YXJhbWV0ZXIsIHJlcXVlc3RQYXJhbWV0ZXIsIHN0ZDo6ZW5kKHJlcXVlc3RQYXJhbWV0ZXJzKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUdfTE9HKCJVbm1hdGNoZWQgcGFyYW1ldGVyOiAi
IFNUUklOR19TUEVDSUZJRVIgIj0iIFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NUUihyZXF1ZXN0
UGFyYW1ldGVyLT5maXJzdCksIERFQlVHX1NUUihyZXF1ZXN0UGFyYW1ldGVyLT5zZWNvbmQpKTsK
LSAgICAgICAgICAgICAgICAgICAgREVCVUdfTE9HKCJVbm1hdGNoZWQgcGFyYW1ldGVyOiAiIFNU
UklOR19TUEVDSUZJRVIgIj0iIFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NUUihyZXNvdXJjZVBh
cmFtZXRlci0+Zmlyc3QpLCBERUJVR19TVFIocmVzb3VyY2VQYXJhbWV0ZXItPnNlY29uZCkpOwot
ICAgICAgICAgICAgICAgICAgICBzY29yZSArPSBrUGFyYW1ldGVyTWlzc2luZ1Njb3JlICsga1Bh
cmFtZXRlck1pc3NpbmdTY29yZTsKLSAgICAgICAgICAgICAgICAgICAgREVCVUdfTE9HKCJTY29y
ZSA9ICVkIiwgc2NvcmUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIERFQlVHX0xPRygiQWRqdXN0aW5nIGZvciB0cmFpbGluZyBwYXJh
bWV0ZXJzIik7Ci0gICAgc2NvcmUgKz0ga1BhcmFtZXRlck1pc3NpbmdTY29yZQotICAgICAgICAq
IChzdGQ6OmRpc3RhbmNlKHJlcXVlc3RQYXJhbWV0ZXIsIHN0ZDo6ZW5kKHJlcXVlc3RQYXJhbWV0
ZXJzKSkKLSAgICAgICAgICAgICsgc3RkOjpkaXN0YW5jZShyZXNvdXJjZVBhcmFtZXRlciwgc3Rk
OjplbmQocmVzb3VyY2VQYXJhbWV0ZXJzKSkpOwotICAgIERFQlVHX0xPRygiU2NvcmUgPSAlZCIs
IHNjb3JlKTsKLQotICAgIHJldHVybiBzY29yZTsKLX0KLQotdm9pZCBNYW5hZ2VyOjpsb2FkUmVz
b3VyY2VzKCkKLXsKLSAgICBhdXRvIGxpbmVzID0gcmVhZEZpbGUocmVwb3J0UmVjb3JkUGF0aCgp
KTsKLSAgICBpZiAoIWxpbmVzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IGF1
dG8mIGxpbmUgOiAqbGluZXMpIHsKLSAgICAgICAgaWYgKGxpbmUuc2l6ZSgpICE9IDIpIHsKLSAg
ICAgICAgICAgIERFQlVHX0xPR19FUlJPUigibGluZS5zaXplID09ICVkIiwgKGludCkgbGluZS5z
aXplKCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBSZXNv
dXJjZSBuZXdSZXNvdXJjZShoYXNoVG9QYXRoKGxpbmVbMF0pKTsKLSAgICAgICAgbV9jYWNoZWRS
ZXNvdXJjZXMuYXBwZW5kKFdURk1vdmUobmV3UmVzb3VyY2UpKTsKLSAgICB9Ci0KLSAgICBzdGQ6
OnNvcnQoc3RkOjpiZWdpbihtX2NhY2hlZFJlc291cmNlcyksIHN0ZDo6ZW5kKG1fY2FjaGVkUmVz
b3VyY2VzKSwgW10oYXV0byYgbGVmdCwgYXV0byYgcmlnaHQpIHsKLSAgICAgICAgcmV0dXJuIFdU
Rjo6Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGxlZnQudXJsKCkuc3RyaW5nKCksIHJpZ2h0LnVy
bCgpLnN0cmluZygpKTsKLSAgICB9KTsKLQotICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBtX2Nh
Y2hlZFJlc291cmNlcykKLSAgICAgICAgbG9nTG9hZGVkUmVzb3VyY2UocmVzb3VyY2UpOwotfQot
Ci1TdHJpbmcgTWFuYWdlcjo6cmVwb3J0TG9hZFBhdGgoKQotewotICAgIHJldHVybiBwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQobV9yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uLCBrRmlsZU5hbWVS
ZXBvcnRMb2FkKTsKLX0KLQotU3RyaW5nIE1hbmFnZXI6OnJlcG9ydFJlY29yZFBhdGgoKQotewot
ICAgIHJldHVybiBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9yZWNvcmRSZXBsYXlDYWNoZUxv
Y2F0aW9uLCBrRmlsZU5hbWVSZXBvcnRSZWNvcmQpOwotfQotCi1TdHJpbmcgTWFuYWdlcjo6cmVw
b3J0UmVwbGF5UGF0aCgpCi17Ci0gICAgcmV0dXJuIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCht
X3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb24sIGtGaWxlTmFtZVJlcG9ydFJlcGxheSk7Ci19Ci0K
LVN0cmluZyBNYW5hZ2VyOjpyZXF1ZXN0VG9QYXRoKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKLXsKLSAgICAvLyBUT0RPOiBjb21lIHVwIHdpdGggYSBtb3JlIGNvbXBy
ZWhlbnNpdmUgaGFzaCB0aGF0IGluY2x1ZGVzIEhUVFAgbWV0aG9kCi0gICAgLy8gYW5kIHBvc3Np
Ymx5IG90aGVyIHZhbHVlcyAoc3VjaCBhcyBoZWFkZXJzKS4KLQotICAgIGNvbnN0IGF1dG8mIGhh
c2ggPSBzdHJpbmdUb0hhc2gocmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7Ci0gICAgY29uc3QgYXV0
byYgcGF0aCA9IGhhc2hUb1BhdGgoaGFzaCk7Ci0gICAgcmV0dXJuIHBhdGg7Ci19Ci0KLVN0cmlu
ZyBNYW5hZ2VyOjpzdHJpbmdUb0hhc2goY29uc3QgU3RyaW5nJiBzKQotewotICAgIFdURjo6TUQ1
IG1kNTsKLSAgICBpZiAocy5jaGFyYWN0ZXJzOCgpKQotICAgICAgICBtZDUuYWRkQnl0ZXMoc3Rh
dGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KHMuY2hhcmFjdGVyczgoKSksIHMubGVuZ3RoKCkpOwot
ICAgIGVsc2UKLSAgICAgICAgbWQ1LmFkZEJ5dGVzKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KHMuY2hhcmFjdGVyczE2KCkpLCAyICogcy5sZW5ndGgoKSk7Ci0KLSAgICBXVEY6Ok1E
NTo6RGlnZXN0IGRpZ2VzdDsKLSAgICBtZDUuY2hlY2tzdW0oZGlnZXN0KTsKLQotICAgIHJldHVy
biBXVEY6OmJhc2U2NFVSTEVuY29kZSgmZGlnZXN0WzBdLCBXVEY6Ok1ENTo6aGFzaFNpemUpOwot
fQotCi1TdHJpbmcgTWFuYWdlcjo6aGFzaFRvUGF0aChjb25zdCBTdHJpbmcmIGhhc2gpCi17Ci0g
ICAgYXV0byBoYXNoSGVhZCA9IGhhc2guc3Vic3RyaW5nKDAsIDIpOwotICAgIGF1dG8gaGFzaFRh
aWwgPSBoYXNoLnN1YnN0cmluZygyKTsKLQotICAgIFN0cmluZ0J1aWxkZXIgZmlsZU5hbWU7Ci0g
ICAgZmlsZU5hbWUuYXBwZW5kKGhhc2hUYWlsKTsKLSAgICBmaWxlTmFtZS5hcHBlbmRMaXRlcmFs
KCIuZGF0YSIpOwotCi0gICAgYXV0byBwYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KG1f
cmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbiwga0Rpck5hbWVSZXNvdXJjZXMpOwotICAgIHBhdGgg
PSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aCwgaGFzaEhlYWQpOwotICAgIHBhdGggPSBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aCwgZmlsZU5hbWUudG9TdHJpbmcoKSk7Ci0KLSAg
ICByZXR1cm4gcGF0aDsKLX0KLQotU3RyaW5nIE1hbmFnZXI6OnVybElkZW50aWZ5aW5nQ29tbW9u
RG9tYWluKGNvbnN0IFVSTCYgdXJsKQotewotICAgIHJldHVybiB1cmwucHJvdG9jb2xIb3N0QW5k
UG9ydCgpOwotfQotCi12b2lkIE1hbmFnZXI6OmxvZ1JlY29yZGVkUmVzb3VyY2UoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQotewotICAgIC8vIExvZyBuZXR3b3JrIHJl
c291cmNlcyBhcyB0aGV5IGFyZSBjYWNoZWQgdG8gZGlzay4KLQotICAgIGNvbnN0IGF1dG8mIHVy
bCA9IHJlcXVlc3QudXJsKCk7Ci0gICAgbV9yZWNvcmRGaWxlSGFuZGxlLnByaW50ZigiJXMgJXNc
biIsIERFQlVHX1NUUihzdHJpbmdUb0hhc2godXJsLnN0cmluZygpKSksIERFQlVHX1NUUih1cmwu
c3RyaW5nKCkpKTsKLX0KLQotdm9pZCBNYW5hZ2VyOjpsb2dMb2FkZWRSZXNvdXJjZShSZXNvdXJj
ZSYgcmVzb3VyY2UpCi17Ci0gICAgLy8gTG9nIGNhY2hlZCByZXNvdXJjZXMgYXMgdGhleSBhcmUg
bG9hZGVkIGZyb20gZGlzay4KLQotICAgIG1fbG9hZEZpbGVIYW5kbGUucHJpbnRmKCIlc1xuIiwg
REVCVUdfU1RSKHJlc291cmNlLnVybCgpLnN0cmluZygpKSk7Ci19Ci0KLXZvaWQgTWFuYWdlcjo6
bG9nUGxheWVkQmFja1Jlc291cmNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgYm9vbCB3YXNDYWNoZU1pc3MpCi17Ci0gICAgLy8gTG9nIG5ldHdvcmsgcmVzb3VyY2Vz
IHRoYXQgYXJlIHJlcXVlc3RlZCBkdXJpbmcgcmVwbGF5LgotCi0gICAgY29uc3QgYXV0byYgdXJs
ID0gcmVxdWVzdC51cmwoKTsKLQotICAgIGlmICh3YXNDYWNoZU1pc3MpCi0gICAgICAgIERFQlVH
X0xPRygiQ2FjaGUgbWlzczogVVJMID0gIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIodXJs
LnN0cmluZygpKSk7Ci0gICAgZWxzZQotICAgICAgICBERUJVR19MT0coIkNhY2hlIGhpdDogIFVS
TCA9ICIgU1RSSU5HX1NQRUNJRklFUiwgREVCVUdfU1RSKHVybC5zdHJpbmcoKSkpOwotCi0gICAg
bV9yZXBsYXlGaWxlSGFuZGxlLnByaW50ZigiJXMgJXNcbiIsIHdhc0NhY2hlTWlzcyA/ICJtaXNz
IiA6ICJoaXQgIiwgREVCVUdfU1RSKHVybC5zdHJpbmcoKSkpOwotfQotCi1XZWJDb3JlOjpGaWxl
SGFuZGxlIE1hbmFnZXI6Om9wZW5DYWNoZUZpbGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCwgRmls
ZU9wZW5Nb2RlIG1vZGUpCi17Ci0gICAgLy8gSWYgd2UgY2FuIHRyaXZpYWxseSBvcGVuIHRoZSBm
aWxlLCB0aGVuIGRvIHRoYXQgYW5kIHJldHVybiB0aGUgbmV3IGZpbGUKLSAgICAvLyBoYW5kbGUu
Ci0KLSAgICBhdXRvIGZpbGVIYW5kbGUgPSBXZWJDb3JlOjpGaWxlSGFuZGxlKGZpbGVQYXRoLCBt
b2RlKTsKLSAgICBpZiAoZmlsZUhhbmRsZS5vcGVuKCkpCi0gICAgICAgIHJldHVybiBmaWxlSGFu
ZGxlOwotCi0gICAgLy8gSWYgd2UncmUgb3BlbmluZyB0aGUgZmlsZSBmb3Igd3JpdGluZyAoaW5j
bHVkaW5nIGFwcGVuZGluZyksIHRoZW4gdHJ5Ci0gICAgLy8gYWdhaW4gYWZ0ZXIgbWFraW5nIHN1
cmUgYWxsIGludGVybWVkaWF0ZSBkaXJlY3RvcmllcyBoYXZlIGJlZW4gY3JlYXRlZC4KLQotICAg
IGlmIChtb2RlICE9IEZpbGVPcGVuTW9kZTo6UmVhZCkgewotICAgICAgICBjb25zdCBhdXRvJiBw
YXJlbnREaXIgPSBkaXJlY3RvcnlOYW1lKGZpbGVQYXRoKTsKLSAgICAgICAgaWYgKCFtYWtlQWxs
RGlyZWN0b3JpZXMocGFyZW50RGlyKSkgewotICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJF
cnJvciAlZCB0cnlpbmcgdG8gY3JlYXRlIGludGVybWVkaWF0ZSBkaXJlY3RvcmllczogIiBTVFJJ
TkdfU1BFQ0lGSUVSLCBlcnJubywgREVCVUdfU1RSKHBhcmVudERpcikpOwotICAgICAgICAgICAg
cmV0dXJuIGZpbGVIYW5kbGU7Ci0gICAgICAgIH0KLQotICAgICAgICBmaWxlSGFuZGxlID0gV2Vi
Q29yZTo6RmlsZUhhbmRsZShmaWxlUGF0aCwgbW9kZSk7Ci0gICAgICAgIGlmIChmaWxlSGFuZGxl
Lm9wZW4oKSkKLSAgICAgICAgICAgIHJldHVybiBmaWxlSGFuZGxlOwotICAgIH0KLQotICAgIC8v
IENvdWxkIG5vdCBvcGVuIHRoZSBmaWxlLiBMb2cgdGhlIGVycm9yIGFuZCBsZWF2ZSwgcmV0dXJu
aW5nIHRoZSBpbnZhbGlkCi0gICAgLy8gZmlsZSBoYW5kbGUuCi0KLSAgICBpZiAobW9kZSA9PSBG
aWxlT3Blbk1vZGU6OlJlYWQpCi0gICAgICAgIERFQlVHX0xPR19FUlJPUigiRXJyb3IgJWQgdHJ5
aW5nIHRvIG9wZW4gIiBTVFJJTkdfU1BFQ0lGSUVSICIgZm9yIHJlYWRpbmciLCBlcnJubywgREVC
VUdfU1RSKGZpbGVQYXRoKSk7Ci0gICAgZWxzZQotICAgICAgICBERUJVR19MT0dfRVJST1IoIkVy
cm9yICVkIHRyeWluZyB0byBvcGVuICIgU1RSSU5HX1NQRUNJRklFUiAiIGZvciB3cml0aW5nIiwg
ZXJybm8sIERFQlVHX1NUUihmaWxlUGF0aCkpOwotCi0gICAgcmV0dXJuIGZpbGVIYW5kbGU7Ci19
Ci0KLXN0ZDo6b3B0aW9uYWw8VmVjdG9yPFZlY3RvcjxTdHJpbmc+Pj4gTWFuYWdlcjo6cmVhZEZp
bGUoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKLXsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsK
LSAgICBNYXBwZWRGaWxlRGF0YSBmaWxlKGZpbGVQYXRoLCBzdWNjZXNzKTsKLSAgICBpZiAoIXN1
Y2Nlc3MpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0KLSAgICBWZWN0b3I8VmVjdG9y
PFN0cmluZz4+IGxpbmVzOwotICAgIGF1dG8gYmVnaW4gPSBzdGF0aWNfY2FzdDxjb25zdCB1aW50
OF90Kj4oZmlsZS5kYXRhKCkpOwotICAgIGF1dG8gZW5kID0gYmVnaW4gKyBmaWxlLnNpemUoKTsK
LQotICAgIFZlY3RvcjxTdHJpbmc+IGxpbmU7Ci0gICAgd2hpbGUgKGdldExpbmUoYmVnaW4sIGVu
ZCwgbGluZSkpCi0gICAgICAgIGxpbmVzLmFwcGVuZChXVEZNb3ZlKGxpbmUpKTsKLQotICAgIHJl
dHVybiBXVEZNb3ZlKGxpbmVzKTsKLX0KLQotYm9vbCBNYW5hZ2VyOjpnZXRMaW5lKHVpbnQ4X3Qg
Y29uc3QgKiYgcCwgdWludDhfdCBjb25zdCAqIGNvbnN0IGVuZCwgVmVjdG9yPFN0cmluZz4mIGxp
bmUpCi17Ci0gICAgLy8gTkI6IFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBtYXkgYmUgbW9yZSBkYXRh
IHRvIGdldCwgZmFsc2UgaWYgd2UndmUgaGl0Ci0gICAgLy8gdGhlIGVuZCBvZiB0aGUgYnVmZmVy
LgotCi0gICAgREVCVUdfTE9HX1ZFUkJPU0UoIkdldHRpbmcgYSBsaW5lIik7Ci0KLSAgICBsaW5l
LmNsZWFyKCk7Ci0KLSAgICBpZiAocCA9PSBlbmQpIHsKLSAgICAgICAgREVCVUdfTE9HX1ZFUkJP
U0UoIkl0ZXJhdG9yIGF0IGVuZDsgcmV0dXJuaW5nIGZhbHNlIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgd29yZDsKLSAgICB3aGlsZSAoZ2V0V29yZChwLCBl
bmQsIHdvcmQpKSB7Ci0gICAgICAgIGlmICghd29yZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAg
IERFQlVHX0xPR19WRVJCT1NFKCJBZGRpbmcgd29yZDogIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJV
R19TVFIod29yZCkpOwotICAgICAgICAgICAgbGluZS5hcHBlbmQod29yZCk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNYW5hZ2VyOjpnZXRXb3JkKHVp
bnQ4X3QgY29uc3QgKiYgcCwgdWludDhfdCBjb25zdCAqIGNvbnN0IGVuZCwgU3RyaW5nJiB3b3Jk
KQotewotICAgIC8vIE5COiBSZXR1cm5zIHRydWUgaWYgYSAocG9zc2libHkgZW1wdHkpIHdvcmQg
d2FzIGZvdW5kIGFuZCB0aGVyZSBtYXkgYmUKLSAgICAvLyBtb3JlLCBmYWxzZSBpZiB3ZSd2ZSBo
aXQgdGhlIGVuZCBvZiBsaW5lIG9yIGJ1ZmZlci4KLQotICAgIERFQlVHX0xPR19WRVJCT1NFKCJH
ZXR0aW5nIGEgd29yZCIpOwotCi0gICAgaWYgKHAgPT0gZW5kKSB7Ci0gICAgICAgIERFQlVHX0xP
R19WRVJCT1NFKCJJdGVyYXRvciBhdCBlbmQ7IHJldHVybmluZyBmYWxzZSIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCpwID09ICdcbicpIHsKLSAgICAgICAgREVC
VUdfTE9HX1ZFUkJPU0UoIkl0ZXJhdG9yIGhpdCBFT0w7IHJldHVybmluZyBmYWxzZSIpOwotICAg
ICAgICArK3A7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29sIGVzY2Fw
aW5nID0gZmFsc2U7Ci0gICAgYm9vbCBpZ25vcmluZyA9IGZhbHNlOwotCi0gICAgd29yZCA9IFN0
cmluZygpOwotCi0gICAgREVCVUdfTE9HX1ZFUkJPU0UoIkl0ZXJhdGluZyIpOwotCi0gICAgZm9y
ICggOyBwICE9IGVuZDsgKytwKSB7Ci0gICAgICAgIGlmIChpZ25vcmluZykgewotICAgICAgICAg
ICAgaWYgKCpwID09ICdcbicpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxz
ZSBpZiAoZXNjYXBpbmcpIHsKLSAgICAgICAgICAgIHdvcmQuYXBwZW5kKCpwKTsKLSAgICAgICAg
ICAgIGVzY2FwaW5nID0gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJyMnKSB7Ci0g
ICAgICAgICAgICBpZ25vcmluZyA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ1xc
JykgewotICAgICAgICAgICAgZXNjYXBpbmcgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCpw
ID09ICcgJykgewotICAgICAgICAgICAgaWYgKCF3b3JkLmlzRW1wdHkoKSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfSBlbHNlIGlmICgqcCA9PSAnXG4nKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdvcmQuYXBwZW5kKCpwKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUK
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jdW5kZWYgREVCVUdfQ0xBU1MKLQotI2VuZGlmIC8v
IEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNjgxNmM5YTg5YTFjN2VmYWQxMDRmMWIwMzkwODgzNmRj
YTdmMzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlTWFuYWdlci5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0Zp
bGVIYW5kbGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDx3
dGYvRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDx3dGYvVVJMUGFyc2VyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci1jbGFzcyBSZXNvdXJjZVJlcXVlc3Q7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsKLQotY2xhc3MgUmVzb3VyY2U7Ci0KLS8qCi0g
KiBOZXR3b3JrQ2FwdHVyZTo6TWFuYWdlciBzZXJ2ZXMgdGhyZWUgcHVycG9zZXM6Ci0gKgotICog
ICogSXQga2VlcHMgdGhlIHN0YXRlIG9mIHdoZXRoZXIgd2UgYXJlIHJlY29yZGluZywgcmVwbGF5
aW5nLCBvciBuZWl0aGVyLgotICogICogSXQga2VlcHMgdGhlIGxpc3Qgb2YgY2FjaGVkIHJlc291
cmNlcyAoaWYgcmVwbGF5aW5nKSwgcGVyZm9ybXMgZnV6enkKLSAqICAgIG1hdGNoaW5nIG9uIHRo
ZW0uCi0gKiAgKiBJdCBoYXMgdXRpbGl0aWVzIGZvciBsb2dnaW5nIGFuZCBmaWxlIG1hbmFnZW1l
bnQuCi0gKgotICogVE9ETzogUGVyaGFwcyB3ZSBzaG91bGQgYnJlYWsgdGhpcyB1cCBpbnRvIHRo
cmVlIGNsYXNzZXM/Ci0gKi8KLWNsYXNzIE1hbmFnZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKE1hbmFnZXIpOwotICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxNYW5hZ2VyPjsKLQotcHVi
bGljOgotICAgIGVudW0gUmVjb3JkUmVwbGF5TW9kZSB7Ci0gICAgICAgIERpc2FibGVkLAotICAg
ICAgICBSZWNvcmQsCi0gICAgICAgIFJlcGxheQotICAgIH07Ci0KLSAgICBzdGF0aWMgTWFuYWdl
ciYgc2luZ2xldG9uKCk7Ci0KLSAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgU3RyaW5nJiByZWNv
cmRSZXBsYXlNb2RlLCBjb25zdCBTdHJpbmcmIHJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24pOwot
ICAgIHZvaWQgdGVybWluYXRlKCk7Ci0KLSAgICBib29sIGlzUmVjb3JkaW5nKCkgY29uc3QgeyBy
ZXR1cm4gbW9kZSgpID09IFJlY29yZFJlcGxheU1vZGU6OlJlY29yZDsgfQotICAgIGJvb2wgaXNS
ZXBsYXlpbmcoKSBjb25zdCB7IHJldHVybiBtb2RlKCkgPT0gUmVjb3JkUmVwbGF5TW9kZTo6UmVw
bGF5OyB9Ci0gICAgUmVjb3JkUmVwbGF5TW9kZSBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yZWNv
cmRSZXBsYXlNb2RlOyB9Ci0KLSAgICBSZXNvdXJjZSogZmluZE1hdGNoKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlUmVxdWVzdCYpOwotCi0gICAgdm9pZCBsb2dSZWNvcmRlZFJlc291cmNlKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgbG9nTG9hZGVkUmVzb3VyY2Uo
UmVzb3VyY2UmKTsKLSAgICB2b2lkIGxvZ1BsYXllZEJhY2tSZXNvdXJjZShjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBib29sIHdhc0NhY2hlTWlzcyk7Ci0KLSAgICBXZWJDb3JlOjpG
aWxlSGFuZGxlIG9wZW5DYWNoZUZpbGUoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6RmlsZVN5c3Rl
bTo6RmlsZU9wZW5Nb2RlKTsKLQotICAgIFN0cmluZyByZXF1ZXN0VG9QYXRoKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHN0YXRpYyBTdHJpbmcgdXJsSWRlbnRpZnlpbmdD
b21tb25Eb21haW4oY29uc3QgVVJMJik7Ci0KLXByaXZhdGU6Ci0gICAgTWFuYWdlcigpID0gZGVm
YXVsdDsKLSAgICB+TWFuYWdlcigpID0gZGVsZXRlOwotCi0gICAgUmVzb3VyY2UqIGZpbmRFeGFj
dE1hdGNoKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIFJlc291cmNlKiBm
aW5kQmVzdEZ1enp5TWF0Y2goY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAg
aW50IGZ1enp5TWF0Y2hVUkxzKGNvbnN0IFVSTCYgcmVxdWVzdFVSTCwgY29uc3QgV1RGOjpVUkxQ
YXJzZXI6OlVSTEVuY29kZWRGb3JtJiByZXF1ZXN0UGFyYW1ldGVycywgY29uc3QgVVJMJiByZXNv
dXJjZVVSTCwgY29uc3QgV1RGOjpVUkxQYXJzZXI6OlVSTEVuY29kZWRGb3JtJiByZXNvdXJjZVBh
cmFtZXRlcnMpOwotCi0gICAgdm9pZCBsb2FkUmVzb3VyY2VzKCk7Ci0KLSAgICBTdHJpbmcgcmVw
b3J0TG9hZFBhdGgoKTsKLSAgICBTdHJpbmcgcmVwb3J0UmVjb3JkUGF0aCgpOwotICAgIFN0cmlu
ZyByZXBvcnRSZXBsYXlQYXRoKCk7Ci0KLSAgICBTdHJpbmcgc3RyaW5nVG9IYXNoKGNvbnN0IFN0
cmluZyYpOwotICAgIFN0cmluZyBoYXNoVG9QYXRoKGNvbnN0IFN0cmluZyYgaGFzaCk7Ci0KLSAg
ICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4+IHJlYWRGaWxlKGNvbnN0IFN0
cmluZyYgZmlsZVBhdGgpOwotICAgIGJvb2wgZ2V0TGluZSh1aW50OF90IGNvbnN0IComIHAsIHVp
bnQ4X3QgY29uc3QgKiBjb25zdCBlbmQsIFZlY3RvcjxTdHJpbmc+JiBsaW5lKTsKLSAgICBib29s
IGdldFdvcmQodWludDhfdCBjb25zdCAqJiBwLCB1aW50OF90IGNvbnN0ICogY29uc3QgZW5kLCBT
dHJpbmcmIHdvcmQpOwotCi0gICAgUmVjb3JkUmVwbGF5TW9kZSBtX3JlY29yZFJlcGxheU1vZGUg
eyBEaXNhYmxlZCB9OwotICAgIFN0cmluZyBtX3JlY29yZFJlcGxheUNhY2hlTG9jYXRpb247Ci0K
LSAgICBXZWJDb3JlOjpGaWxlSGFuZGxlIG1fbG9hZEZpbGVIYW5kbGU7Ci0gICAgV2ViQ29yZTo6
RmlsZUhhbmRsZSBtX3JlY29yZEZpbGVIYW5kbGU7Ci0gICAgV2ViQ29yZTo6RmlsZUhhbmRsZSBt
X3JlcGxheUZpbGVIYW5kbGU7Ci0KLSAgICBWZWN0b3I8UmVzb3VyY2U+IG1fY2FjaGVkUmVzb3Vy
Y2VzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlY29y
ZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2Fw
dHVyZVJlY29yZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTFiZGYzNjk5
NTc4MGU5ZGQwMWUwYTlkYzM4MzhlNGEwMmZjZjUzYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1
cmUvTmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJOZXR3b3Jr
Q2FwdHVyZVJlY29yZGVyLmgiCi0KLSNpZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQotCi0jaW5j
bHVkZSAiTmV0d29ya0NhcHR1cmVMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVN
YW5hZ2VyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4KLQotI2RlZmluZSBERUJVR19DTEFTUyBSZWNvcmRl
cgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZSB7Ci0KLXZv
aWQgUmVjb3JkZXI6OnJlY29yZFJlcXVlc3RTZW50KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCkKLXsKLSAgICAvLyBUaGlzIGNsYXNzIHJlY29yZHMgTmV0d29ya0xvYWQn
cyBwcm9jZXNzIG9mIGxvYWRpbmcgYSBuZXR3b3JrIHJlc291cmNlLgotICAgIC8vIE5ldHdvcmtM
b2FkIGRvZXMgdGhpcyBieSBjcmVhdGluZyBhIE5ldHdvcmtEYXRhVGFzayBhbmQgY2FsbGluZyBy
ZXN1bWUKLSAgICAvLyBvbiBpdC4gVGhpcyBjYWxsIHRvIHJlc3VtZSBjYW4gYmUgY2FsbGVkIGlt
bWVkaWF0ZWx5IGFmdGVyIHRoZSB0YXNrIGhhcwotICAgIC8vIGJlZW4gY3JlYXRlZCwgb3IgLS0g
aWYgdGhlIGxvYWRpbmcgaXMgbWFya2VkIGFzIGRlZmVycmVkIC0tIGl0IGNhbiBiZQotICAgIC8v
IGNhbGxlZCBsYXRlciBpbiBOZXR3b3JrTG9hZDo6c2V0RGVmZXJyZWQodHJ1ZSkuIEluIGZhY3Qs
IHRoZSBsYXR0ZXIgY2FuCi0gICAgLy8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGlmIHRoZSBs
b2FkaW5nIGlzIHN1c3BlbmRlZCBhbmQgcmVzdW1lZAotICAgIC8vIG11bHRpcGxlIHRpbWVzLgot
ICAgIC8vCi0gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGluIGJvdGggcGxhY2VzIHdoZXJl
IHJlc3VtZSBpcyBjYWxsZWQuIE91ciB0YXNrIGlzCi0gICAgLy8gdG8gY2F0Y2ggdGhlIGNhbGwg
dG8gTmV0d29ya0RhdGFUYXNrOjpyZXN1bWUgdGhhdCBzdGFydHMgdGhlIG5ldHdvcmsKLSAgICAv
LyBsb2FkaW5nIHByb2Nlc3MuIFdlIHdhbnQgdG8gaWdub3JlIHRoZSBvdGhlciBjYWxscyB0byBy
ZXN1bWUuIE91cgotICAgIC8vIGFwcHJvYWNoIHRvIGtub3dpbmcgd2hpY2ggb25lIGlzIHRoZSBm
aXJzdCBpcyB0byBjaGVjayBvdXIgY29sbGVjdGlvbiBvZgotICAgIC8vIHJlY29yZGVkIGV2ZW50
cy4gSWYgaXQgaXMgZW1wdHksIHRoZW4gdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCBpbnRvIHRoZQot
ICAgIC8vIHJlY29yZGVyLCBhbmQgd2Ugd2FudCB0byByZWNvcmQgdGhlIGV2ZW50LiBPdGhlcndp
c2UsIGlnbm9yZSBpdC4KLQotICAgIGlmIChtX2V2ZW50cy5zaXplKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIERFQlVHX0xPRygiU2VudCByZXF1ZXN0IGZvciBVUkwgPSAiIFNUUklOR19TUEVD
SUZJRVIsIERFQlVHX1NUUihyZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7Ci0KLSAgICBtX2luaXRp
YWxSZXF1ZXN0ID0gcmVxdWVzdDsKLSAgICByZWNvcmRFdmVudChSZXF1ZXN0U2VudEV2ZW50KHJl
cXVlc3QpKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6cmVjb3JkUmVzcG9uc2VSZWNlaXZlZChjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICAvLyBDYWxsZWQg
d2hlbiByZWNlaXZpbmcgYSByZXNwb25zZSBvdGhlciB0aGFuIGEgcmVkaXJlY3Qgb3IgZXJyb3Iu
Ci0KLSAgICBERUJVR19MT0coIlJlY2VpdmVkIHJlc3BvbnNlIGZyb20gVVJMID0gIiBTVFJJTkdf
U1BFQ0lGSUVSLCBERUJVR19TVFIocmVzcG9uc2UudXJsKCkuc3RyaW5nKCkpKTsKLSAgICBBU1NF
UlQobV9ldmVudHMuc2l6ZSgpKTsKLQotICAgIC8vIFRPRE86IElzIHRoZXJlIGEgYmV0dGVyIHJl
c3BvbnNlIHRvIHJlY2VpdmluZyBhIG11bHRpLXBhcnQgcmVzb3VyY2U/Ci0gICAgLy8gTGVhcm4g
bW9yZSBhYm91dCBtdWx0aS1wYXJ0IHJlc291cmNlcy4gV2h5IGRvbid0IHdlIHJlY29yZCB0aGVz
ZT8gKE5vdGUsCi0gICAgLy8gdGhpcyBkZWNpc2lvbiBpcyBiYXNlZCBvbiBzb21lIE5ldHdvcmtD
YWNoZSBjb2RlLikKLQotICAgIGlmICghcmVzcG9uc2UuaXNNdWx0aXBhcnQoKSkKLSAgICAgICAg
cmVjb3JkRXZlbnQoUmVzcG9uc2VSZWNlaXZlZEV2ZW50KHJlc3BvbnNlKSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2V2ZW50cy5jbGVhcigpOwotfQotCi12b2lkIFJlY29yZGVyOjpyZWNvcmRSZWRp
cmVjdFJlY2VpdmVkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgREVCVUdfTE9H
KCJSZWNlaXZlZCByZWRpcmVjdCB0byBVUkwgPSAiIFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NU
UihyZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7Ci0gICAgQVNTRVJUKG1fZXZlbnRzLnNpemUoKSk7
Ci0KLSAgICByZWNvcmRFdmVudChSZWRpcmVjdFJlY2VpdmVkRXZlbnQocmVxdWVzdCwgcmVzcG9u
c2UpKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6cmVjb3JkUmVkaXJlY3RTZW50KGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKLXsKLSAgICBERUJVR19MT0coIlNlbnQgcmVk
aXJlY3QgZm9yIFVSTCA9ICIgU1RSSU5HX1NQRUNJRklFUiwgREVCVUdfU1RSKHJlcXVlc3QudXJs
KCkuc3RyaW5nKCkpKTsKLSAgICBBU1NFUlQobV9ldmVudHMuc2l6ZSgpKTsKLQotICAgIHJlY29y
ZEV2ZW50KFJlZGlyZWN0U2VudEV2ZW50KHJlcXVlc3QpKTsKLX0KLQotdm9pZCBSZWNvcmRlcjo6
cmVjb3JkRGF0YVJlY2VpdmVkKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlciYgYnVmZmVyKQotewotICAg
IERFQlVHX0xPRygiUmVjZWl2ZWQgJXUgYnl0ZXMgb2YgZGF0YSIsIGJ1ZmZlci5zaXplKCkpOwot
Ci0gICAgaWYgKCFtX2V2ZW50cy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFBy
ZXZlbnQgbWVtb3J5IGdyb3d0aCBpbiBjYXNlIG9mIHN0cmVhbWluZyBkYXRhLiBUT0RPOiBJcyB0
aGVyZSBhIGJldHRlcgotICAgIC8vIHJlc3BvbnNlIHRvIHRoaXM/IElmIHdlIGVuY291bnRlciB0
aGlzIGNvbmRpdGlvbiwgYWxsIG9mIG91ciByZWNvcmRpbmcKLSAgICAvLyBzaWxlbnRseSBnb2Vz
IG91dCB0aGUgd2luZG93LiBSZXBsYXkgd2lsbCBub3Qgd29yaywgYW5kIHRoZSB1c2VyIGRvZXNu
J3QKLSAgICAvLyBrbm93IHRoYXQuCi0KLSAgICBjb25zdGV4cHIgc2l6ZV90IGtNYXhpbXVtQ2Fj
aGVCdWZmZXJTaXplID0gMTAgKiAxMDI0ICogMTAyNDsKLSAgICBtX2RhdGFMZW5ndGggKz0gYnVm
ZmVyLnNpemUoKTsKLSAgICBpZiAobV9kYXRhTGVuZ3RoIDw9IGtNYXhpbXVtQ2FjaGVCdWZmZXJT
aXplKQotICAgICAgICByZWNvcmRFdmVudChEYXRhUmVjZWl2ZWRFdmVudChidWZmZXIpKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fZXZlbnRzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OnJl
Y29yZEZpbmlzaChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKLXsKLSAgICBE
RUJVR19MT0coIkZpbmlzaGVkIik7Ci0KLSAgICBpZiAoIW1fZXZlbnRzLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgcmVjb3JkRXZlbnQoRmluaXNoZWRFdmVudChlcnJvcikpOwotICAg
IHdyaXRlRXZlbnRzKCk7Ci19Ci0KLXZvaWQgUmVjb3JkZXI6OndyaXRlRXZlbnRzKCkKLXsKLSAg
ICBhdXRvIHBhdGggPSBNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZXF1ZXN0VG9QYXRoKG1faW5pdGlh
bFJlcXVlc3QpOwotICAgIGF1dG8gaGFuZGxlID0gTWFuYWdlcjo6c2luZ2xldG9uKCkub3BlbkNh
Y2hlRmlsZShwYXRoLCBXZWJDb3JlOjpGaWxlU3lzdGVtOjpGaWxlT3Blbk1vZGU6OldyaXRlKTsK
LSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChhdXRvIGNvbnN0
JiBldmVudCA6IG1fZXZlbnRzKSB7Ci0gICAgICAgIGF1dG8gYXNTdHJpbmcgPSBldmVudFRvU3Ry
aW5nKGV2ZW50KTsKLSAgICAgICAgLy8gV3JpdGUgb3V0IHRoZSBKU09OIHN0cmluZyB3aXRoIHRo
ZSB0ZXJtaW5hdGluZyBOVUwuIFRoaXMgYWxsb3dzIHVzCi0gICAgICAgIC8vIHRvIGJldHRlciBm
aW5kIHRoZSBzZXBhcmF0ZSBKU09OIG9iamVjdHMgdGhhdCB3ZSB3cml0ZSB0byBhIHNpbmdsZQot
ICAgICAgICAvLyBmaWxlLiBJdCBhbHNvIHdvcmtzIGJldHRlciB3aXRoIEpTT04gcGFyc2VycyB0
aGF0IGV4cGVjdCB0byBmaW5kIGEKLSAgICAgICAgLy8gTlVMIGF0IHRoZSBlbmQgb2YgdGhlaXIg
aW5wdXQuCi0gICAgICAgIGlmIChoYW5kbGUud3JpdGUoYXNTdHJpbmcuY19zdHIoKSwgYXNTdHJp
bmcuc2l6ZSgpICsgMSkgPT0gLTEpIHsKLSAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXJy
b3IgdHJ5aW5nIHRvIHdyaXRlIHRvIGZpbGUgZm9yIFVSTCA9ICIgU1RSSU5HX1NQRUNJRklFUiwg
REVCVUdfU1RSKG1faW5pdGlhbFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIE1hbmFnZXI6OnNpbmdsZXRvbigpLmxv
Z1JlY29yZGVkUmVzb3VyY2UobV9pbml0aWFsUmVxdWVzdCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IE5ldHdvcmtDYXB0dXJlCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI3VuZGVmIERFQlVHX0NM
QVNTCi0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVjb3JkZXIu
aCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJl
Y29yZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmZDUzMTMwMDhjN2MzMzc2
MDQzZGFiMzU0NjA3OWQxNmE5Zjg1NWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdv
cmtDYXB0dXJlUmVjb3JkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShORVRXT1JLX0NBUFRVUkUpCi0KLSNp
bmNsdWRlICJOZXR3b3JrQ2FwdHVyZUV2ZW50LmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJj
ZVJlcXVlc3QuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgUmVzb3VyY2VFcnJvcjsK
LWNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci1jbGFzcyBTaGFyZWRCdWZmZXI7Ci19Ci0KLW5hbWVz
cGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsKLQotY2xhc3MgUmVjb3Jk
ZXIgewotcHVibGljOgotICAgIHZvaWQgcmVjb3JkUmVxdWVzdFNlbnQoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgdm9pZCByZWNvcmRSZXNwb25zZVJlY2VpdmVkKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2b2lkIHJlY29yZFJlZGlyZWN0UmVj
ZWl2ZWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSYpOwotICAgIHZvaWQgcmVjb3JkUmVkaXJlY3RTZW50KGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCYpOwotICAgIHZvaWQgcmVjb3JkRGF0YVJlY2VpdmVkKFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlciYpOwotICAgIHZvaWQgcmVjb3JkRmluaXNoKGNvbnN0IFdlYkNvcmU6
OlJlc291cmNlRXJyb3ImKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHdyaXRlRXZlbnRzKCk7Ci0K
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLSAgICB2b2lkIHJlY29yZEV2ZW50KFQmJiBldmVu
dCkKLSAgICB7Ci0gICAgICAgIG1fZXZlbnRzLmFwcGVuZChDYXB0dXJlRXZlbnQoV1RGTW92ZShl
dmVudCkpKTsKLSAgICB9Ci0KLSAgICBDYXB0dXJlRXZlbnRzIG1fZXZlbnRzOwotICAgIFdlYkNv
cmU6OlJlc291cmNlUmVxdWVzdCBtX2luaXRpYWxSZXF1ZXN0OwotICAgIHNpemVfdCBtX2RhdGFM
ZW5ndGggeyAwIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBOZXR3b3JrQ2FwdHVyZQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0
dXJlUmVwbGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtDYXB0dXJlUmVwbGF5ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5
NmRjNWYyZTdmOTkzMDk5NmZlY2QwY2I0ZmYxMTI4MTljNDU2ZGQyLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
TmV0d29ya0NhcHR1cmVSZXBsYXllci5oIgotCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkK
LQotI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oIgotI2luY2x1ZGUgIk5ldHdvcmtD
YXB0dXJlTWFuYWdlci5oIgotI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFza1JlcGxheS5oIgotI2lu
Y2x1ZGUgIk5ldHdvcmtMb2FkUGFyYW1ldGVycy5oIgotCi0jZGVmaW5lIERFQlVHX0NMQVNTIFJl
cGxheWVyCi0KLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsK
LQotUmVmPE5ldHdvcmtEYXRhVGFzaz4gUmVwbGF5ZXI6OnJlcGxheVJlc291cmNlKE5ldHdvcmtT
ZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmIGNsaWVudCwgY29uc3QgTmV0
d29ya0xvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQotewotICAgIGF1dG8gZm91bmRSZXNvdXJj
ZSA9IE1hbmFnZXI6OnNpbmdsZXRvbigpLmZpbmRNYXRjaChwYXJhbWV0ZXJzLnJlcXVlc3QpOwot
ICAgIE1hbmFnZXI6OnNpbmdsZXRvbigpLmxvZ1BsYXllZEJhY2tSZXNvdXJjZShwYXJhbWV0ZXJz
LnJlcXVlc3QsICFmb3VuZFJlc291cmNlKTsKLSAgICByZXR1cm4gTmV0d29ya0RhdGFUYXNrUmVw
bGF5OjpjcmVhdGUoc2Vzc2lvbiwgY2xpZW50LCBwYXJhbWV0ZXJzLCBmb3VuZFJlc291cmNlKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKLX0gLy8gbmFtZXNwYWNlIFdlYktp
dAotCi0jdW5kZWYgREVCVUdfQ0xBU1MKLQotI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRV
UkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVSZXBsYXllci5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0
dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDg3ZWM1MDYwYWQ2NGQwZmM3MTdiODcyNjM3MjUxMmM5ZDk4OTBhYi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhcHR1cmUvTmV0d29ya0NhcHR1cmVSZXBsYXllci5oCisrKyAvZGV2L251bGwKQEAg
LTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKE5F
VFdPUktfQ0FQVFVSRSkKLQotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci1jbGFzcyBOZXR3b3JrRGF0YVRhc2s7Ci1jbGFzcyBOZXR3b3JrRGF0YVRhc2tDbGllbnQ7
Ci1jbGFzcyBOZXR3b3JrTG9hZFBhcmFtZXRlcnM7Ci1jbGFzcyBOZXR3b3JrU2Vzc2lvbjsKLX0K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci1uYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUgewotCi1jbGFz
cyBSZXBsYXllciB7Ci1wdWJsaWM6Ci0gICAgUmVmPE5ldHdvcmtEYXRhVGFzaz4gcmVwbGF5UmVz
b3VyY2UoTmV0d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBOZXR3
b3JrTG9hZFBhcmFtZXRlcnMmKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJl
Ci19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShORVRXT1JLX0NBUFRV
UkUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0
d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2Nh
cHR1cmUvTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGYzZGMyM2M1NzA2OTRlZjNiYmYyNWJiYmEzMjM1MWNkODBmNzQwOTMuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oIgotCi0jaWYgRU5BQkxFKE5FVFdPUktf
Q0FQVFVSRSkKLQotI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlRXZlbnQuaCIKLSNpbmNsdWRlICJO
ZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZU1hbmFnZXIu
aCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJL
aXQgewotbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsKLQotUmVzb3VyY2U6OlJlc291cmNlKGNv
bnN0IFN0cmluZyYgZXZlbnRGaWxlUGF0aCkKLSAgICA6IG1fZXZlbnRGaWxlUGF0aChldmVudEZp
bGVQYXRoKQotewotfQotCi1jb25zdCBVUkwmIFJlc291cmNlOjp1cmwoKQotewotICAgIGlmICgh
bV91cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGF1dG8gZXZlbnRzID0gZXZlbnRTdHJlYW0oKTsK
LSAgICAgICAgYXV0byBldmVudCA9IGV2ZW50cy5uZXh0RXZlbnQoKTsKLSAgICAgICAgaWYgKCFl
dmVudCkKLSAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXZlbnQgc3RyZWFtIGRvZXMgbm90
IGNvbnRhaW4gZXZlbnRzOiBmaWxlID0gIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIobV9l
dmVudEZpbGVQYXRoKSk7Ci0gICAgICAgIGVsc2UgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZl
PFJlcXVlc3RTZW50RXZlbnQ+KCpldmVudCkpCi0gICAgICAgICAgICBERUJVR19MT0dfRVJST1Io
IkV2ZW50IHN0cmVhbSBkb2VzIG5vdCBoYXZlIGEgcmVxdWVzdFNlbnQgZXZlbnQ6IGZpbGUgPSAi
IFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NUUihtX2V2ZW50RmlsZVBhdGgpKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIHJlcXVlc3RTZW50RXZlbnQgPSBXVEY6OmdldDxSZXF1
ZXN0U2VudEV2ZW50PigqZXZlbnQpOwotICAgICAgICAgICAgbV91cmwgPSBVUkwoeyB9LCByZXF1
ZXN0U2VudEV2ZW50LnJlcXVlc3QudXJsKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBtX3VybDsKLX0KLQotY29uc3QgU3RyaW5nJiBSZXNvdXJjZTo6dXJsSWRlbnRpZnlpbmdDb21t
b25Eb21haW4oKQotewotICAgIGlmIChtX3VybElkZW50aWZ5aW5nQ29tbW9uRG9tYWluLmlzTnVs
bCgpKQotICAgICAgICBtX3VybElkZW50aWZ5aW5nQ29tbW9uRG9tYWluID0gTWFuYWdlcjo6dXJs
SWRlbnRpZnlpbmdDb21tb25Eb21haW4odXJsKCkpOwotCi0gICAgcmV0dXJuIG1fdXJsSWRlbnRp
ZnlpbmdDb21tb25Eb21haW47Ci19Ci0KLVdURjo6VVJMUGFyc2VyOjpVUkxFbmNvZGVkRm9ybSBS
ZXNvdXJjZTo6cXVlcnlQYXJhbWV0ZXJzKCkKLXsKLSAgICBpZiAoIW1fcXVlcnlQYXJhbWV0ZXJz
KQotICAgICAgICBtX3F1ZXJ5UGFyYW1ldGVycyA9IFdURjo6VVJMUGFyc2VyOjpwYXJzZVVSTEVu
Y29kZWRGb3JtKHVybCgpLnF1ZXJ5KCkpOwotCi0gICAgcmV0dXJuICptX3F1ZXJ5UGFyYW1ldGVy
czsKLX0KLQotUmVzb3VyY2U6OkV2ZW50U3RyZWFtIFJlc291cmNlOjpldmVudFN0cmVhbSgpCi17
Ci0gICAgcmV0dXJuIEV2ZW50U3RyZWFtKG1fZXZlbnRGaWxlUGF0aCk7Ci19Ci0KLVJlc291cmNl
OjpFdmVudFN0cmVhbTo6RXZlbnRTdHJlYW0oY29uc3QgU3RyaW5nJiBldmVudEZpbGVQYXRoKQot
ICAgIDogbV9ldmVudEZpbGVQYXRoKGV2ZW50RmlsZVBhdGgpCi0gICAgLCBtX21hcHBlZEV2ZW50
RmlsZShtX2V2ZW50RmlsZVBhdGgsIG1faGF2ZU1hcHBlZEV2ZW50RmlsZSkKLXsKLX0KLQotT3B0
aW9uYWxDYXB0dXJlRXZlbnQgUmVzb3VyY2U6OkV2ZW50U3RyZWFtOjpuZXh0RXZlbnQoKQotewot
ICAgIGlmIChtX29mZnNldCA9PSBtX21hcHBlZEV2ZW50RmlsZS5zaXplKCkpIHsKLSAgICAgICAg
REVCVUdfTE9HX0VSUk9SKCJVbmFibGUgdG8gcmV0dXJuIGV2ZW50IC0gYXQgZW5kIG9mIGZpbGU6
ICIgU1RSSU5HX1NQRUNJRklFUiwgREVCVUdfU1RSKG1fZXZlbnRGaWxlUGF0aCkpOwotICAgICAg
ICByZXR1cm4gc3RkOjpudWxsb3B0OwotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIGNoYXJCdWZm
ZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9tYXBwZWRFdmVudEZpbGUuZGF0YSgpKTsK
LSAgICBjb25zdCBjaGFyKiBjdXJyZW50ID0gY2hhckJ1ZmZlciArIG1fb2Zmc2V0OwotCi0gICAg
d2hpbGUgKG1fb2Zmc2V0IDwgbV9tYXBwZWRFdmVudEZpbGUuc2l6ZSgpICYmIGNoYXJCdWZmZXJb
bV9vZmZzZXRdKQotICAgICAgICArK21fb2Zmc2V0OwotCi0gICAgaWYgKG1fb2Zmc2V0ID09IG1f
bWFwcGVkRXZlbnRGaWxlLnNpemUoKSkgewotICAgICAgICBERUJVR19MT0dfRVJST1IoIlVuYWJs
ZSB0byByZXR1cm4gZXZlbnQgLSBubyB0ZXJtaW5hdGluZyBOVUw6ICIgU1RSSU5HX1NQRUNJRklF
UiwgREVCVUdfU1RSKG1fZXZlbnRGaWxlUGF0aCkpOwotICAgICAgICByZXR1cm4gc3RkOjpudWxs
b3B0OwotICAgIH0KLQotICAgICsrbV9vZmZzZXQ7Ci0KLSAgICByZXR1cm4gc3RyaW5nVG9FdmVu
dChjdXJyZW50KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKLX0gLy8gbmFt
ZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrQ2FwdHVy
ZVJlc291cmNlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvTmV0d29y
a0NhcHR1cmVSZXNvdXJjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDkzZjRh
NGEzNWFkOGVhNmNkYjJkZDhlMDI1ZDY5MGM1ODkyNWUyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2Fw
dHVyZS9OZXR3b3JrQ2FwdHVyZVJlc291cmNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUoTkVUV09SS19DQVBU
VVJFKQotCi0jaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVFdmVudC5oIgotI2luY2x1ZGUgPFdlYkNv
cmUvRmlsZVN5c3RlbS5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi9VUkwuaD4KLSNpbmNsdWRlIDx3dGYvVVJMUGFyc2VyLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlIHsKLQotY2xhc3MgUmVzb3VyY2UgewotcHVibGlj
OgotICAgIGNsYXNzIEV2ZW50U3RyZWFtIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEV2ZW50U3Ry
ZWFtKCkgPSBkZWZhdWx0OwotICAgICAgICBFdmVudFN0cmVhbShjb25zdCBTdHJpbmcmIGV2ZW50
RmlsZVBhdGgpOwotCi0gICAgICAgIE9wdGlvbmFsQ2FwdHVyZUV2ZW50IG5leHRFdmVudCgpOwot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgU3RyaW5nIG1fZXZlbnRGaWxlUGF0aDsKLSAgICAgICAg
Ym9vbCBtX2hhdmVNYXBwZWRFdmVudEZpbGUgeyBmYWxzZSB9OwotICAgICAgICBXZWJDb3JlOjpG
aWxlU3lzdGVtOjpNYXBwZWRGaWxlRGF0YSBtX21hcHBlZEV2ZW50RmlsZTsKLSAgICAgICAgc2l6
ZV90IG1fb2Zmc2V0IHsgMCB9OwotICAgIH07Ci0KLXB1YmxpYzoKLSAgICBSZXNvdXJjZShjb25z
dCBTdHJpbmcmIGV2ZW50RmlsZVBhdGgpOwotCi0gICAgY29uc3QgVVJMJiB1cmwoKTsKLSAgICBj
b25zdCBTdHJpbmcmIHVybElkZW50aWZ5aW5nQ29tbW9uRG9tYWluKCk7Ci0gICAgV1RGOjpVUkxQ
YXJzZXI6OlVSTEVuY29kZWRGb3JtIHF1ZXJ5UGFyYW1ldGVycygpOwotICAgIEV2ZW50U3RyZWFt
IGV2ZW50U3RyZWFtKCk7Ci0KLXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fZXZlbnRGaWxlUGF0aDsK
LSAgICBVUkwgbV91cmw7Ci0gICAgU3RyaW5nIG1fdXJsSWRlbnRpZnlpbmdDb21tb25Eb21haW47
Ci0gICAgc3RkOjpvcHRpb25hbDxXVEY6OlVSTFBhcnNlcjo6VVJMRW5jb2RlZEZvcm0+IG1fcXVl
cnlQYXJhbWV0ZXJzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0
YVRhc2tSZXBsYXkuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05l
dHdvcmtEYXRhVGFza1JlcGxheS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1
NmM3NGVkYTAwYjNjNDhlOWM3MWQ1M2U4OWE4ZjQ3Yjc5OTU2NDkuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
OTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIk5ldHdvcmtEYXRhVGFza1JlcGxheS5oIgotCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FQVFVS
RSkKLQotI2luY2x1ZGUgIk5ldHdvcmtDYXB0dXJlRXZlbnQuaCIKLSNpbmNsdWRlICJOZXR3b3Jr
Q2FwdHVyZUxvZ2dpbmcuaCIKLSNpbmNsdWRlICJOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmgiCi0j
aW5jbHVkZSAiTmV0d29ya0xvYWRQYXJhbWV0ZXJzLmgiCi0jaW5jbHVkZSAiTmV0d29ya1Nlc3Np
b24uaCIKLSNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlRXJyb3IuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlUmVxdWVzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25z
ZS5oPgotI2luY2x1ZGUgPHd0Zi9SdW5Mb29wLmg+Ci0KLSNkZWZpbmUgREVCVUdfQ0xBU1MgTmV0
d29ya0RhdGFUYXNrUmVwbGF5Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotbmFtZXNwYWNlIE5ldHdv
cmtDYXB0dXJlIHsKLQotc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHdlYktpdFJlbGF5RG9tYWlu
ID0gIldlYktpdFJlcGxheSI7Ci0KLU5ldHdvcmtEYXRhVGFza1JlcGxheTo6TmV0d29ya0RhdGFU
YXNrUmVwbGF5KE5ldHdvcmtTZXNzaW9uJiBzZXNzaW9uLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQm
IGNsaWVudCwgY29uc3QgTmV0d29ya0xvYWRQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBSZXNvdXJj
ZSogcmVzb3VyY2UpCi0gICAgOiBOZXR3b3JrRGF0YVRhc2soc2Vzc2lvbiwgY2xpZW50LCBwYXJh
bWV0ZXJzLnJlcXVlc3QsIHBhcmFtZXRlcnMuc3RvcmVkQ3JlZGVudGlhbHNQb2xpY3ksIHBhcmFt
ZXRlcnMuc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCwgcGFyYW1ldGVy
cy5pc01haW5GcmFtZU5hdmlnYXRpb24pCi0gICAgLCBtX2N1cnJlbnRSZXF1ZXN0KG1fZmlyc3RS
ZXF1ZXN0KQotICAgICwgbV9yZXNvdXJjZShyZXNvdXJjZSkKLXsKLSAgICBERUJVR19MT0coInJl
cXVlc3QgVVJMID0gIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3Qu
dXJsKCkuc3RyaW5nKCkpKTsKLSAgICBERUJVR19MT0coImNhY2hlZCBVUkwgPSAiIFNUUklOR19T
UEVDSUZJRVIsIHJlc291cmNlID8gREVCVUdfU1RSKHJlc291cmNlLT51cmwoKS5zdHJpbmcoKSkg
OiAiPG5vdCBmb3VuZD4iKTsKLQotICAgIG1fc2Vzc2lvbi0+cmVnaXN0ZXJOZXR3b3JrRGF0YVRh
c2soKnRoaXMpOwotCi0gICAgaWYgKHJlc291cmNlKQotICAgICAgICBtX2V2ZW50U3RyZWFtID0g
cmVzb3VyY2UtPmV2ZW50U3RyZWFtKCk7Ci19Ci0KLU5ldHdvcmtEYXRhVGFza1JlcGxheTo6fk5l
dHdvcmtEYXRhVGFza1JlcGxheSgpCi17Ci0gICAgREVCVUdfTE9HKCJVUkwgPSAiIFNUUklOR19T
UEVDSUZJRVIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOwotCi0g
ICAgbV9zZXNzaW9uLT51bnJlZ2lzdGVyTmV0d29ya0RhdGFUYXNrKCp0aGlzKTsKLX0KLQotdm9p
ZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlc3VtZSgpCi17Ci0gICAgREVCVUdfTE9HKCJVUkwg
PSAiIFNUUklOR19TUEVDSUZJRVIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJp
bmcoKSkpOwotCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNhbmNlbGluZyB8fCBtX3N0YXRl
ID09IFN0YXRlOjpDb21wbGV0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUgPSBT
dGF0ZTo6UnVubmluZzsKLQotICAgIGlmIChtX3NjaGVkdWxlZEZhaWx1cmVUeXBlICE9IE5vRmFp
bHVyZSkgewotICAgICAgICBBU1NFUlQobV9mYWlsdXJlVGltZXIuaXNBY3RpdmUoKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbnF1ZXVlRXZlbnRIYW5kbGVyKCk7Ci19Ci0KLXZv
aWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpzdXNwZW5kKCkKLXsKLSAgICBERUJVR19MT0coIlVS
TCA9ICIgU1RSSU5HX1NQRUNJRklFUiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0
cmluZygpKSk7Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3Rh
dGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdGF0ZSA9
IFN0YXRlOjpTdXNwZW5kZWQ7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpjYW5j
ZWwoKQotewotICAgIERFQlVHX0xPRygiIik7Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6
Q2FuY2VsaW5nIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5jZWxpbmc7Ci19Ci0KLXZvaWQgTmV0d29ya0Rh
dGFUYXNrUmVwbGF5Ojpjb21wbGV0ZSgpCi17Ci0gICAgREVCVUdfTE9HKCJVUkwgPSAiIFNUUklO
R19TUEVDSUZJRVIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOwot
Ci0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNvbXBsZXRlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zdGF0ZSA9IFN0YXRlOjpDb21wbGV0ZWQ7Ci0gICAgbV9yZXNvdXJjZSA9IG51bGxw
dHI7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjppbnZhbGlkYXRlQW5kQ2FuY2Vs
KCkKLXsKLSAgICBERUJVR19MT0coIlVSTCA9ICIgU1RSSU5HX1NQRUNJRklFUiwgREVCVUdfU1RS
KG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7Ci0KLSAgICBjYW5jZWwoKTsKLSAgICBj
b21wbGV0ZSgpOwotfQotCi12b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxheTo6ZW5xdWV1ZUV2ZW50
SGFuZGxlcigpCi17Ci0gICAgREVCVUdfTE9HKCJVUkwgPSAiIFNUUklOR19TUEVDSUZJRVIsIERF
QlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOwotCi0gICAgUnVuTG9vcDo6
bWFpbigpLmRpc3BhdGNoKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsK
LSAgICAgICAgREVCVUdfTE9HKCJlbnF1ZXVlRXZlbnRIYW5kbGVyIGNhbGxiYWNrIik7Ci0KLSAg
ICAgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlN1c3BlbmRlZCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6Q2FuY2VsaW5nIHx8IG1fc3RhdGUg
PT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhbV9jbGllbnQpIHsKLSAgICAgICAgICAgIGNvbXBsZXRl
KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW1fcmVz
b3VyY2UpIHsKLSAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiRXJyb3IgbG9hZGluZyByZXNv
dXJjZTogY291bGQgbm90IGZpbmQgY2FjaGVkIHJlc291cmNlLCBVUkwgPSAiIFNUUklOR19TUEVD
SUZJRVIsIERFQlVHX1NUUihtX2N1cnJlbnRSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7Ci0gICAg
ICAgICAgICBkaWRGaW5pc2goRXJyb3I6Ok5vdEZvdW5kRXJyb3IpOyAvLyBUT0RPOiBUdXJuIHRo
aXMgaW50byBhIDQwND8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobV9jdXJyZW50UmVxdWVzdC5odHRw
TWV0aG9kKCksICJnZXQiKSkgewotICAgICAgICAgICAgREVCVUdfTE9HX0VSUk9SKCJFcnJvciBs
b2FkaW5nIHJlc291cmNlOiB1bnN1cHBvcnRlZCBtZXRob2QgKCIgU1RSSU5HX1NQRUNJRklFUiAi
KSwgVVJMID0gIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIobV9jdXJyZW50UmVxdWVzdC5o
dHRwTWV0aG9kKCkpLCBERUJVR19TVFIobV9jdXJyZW50UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkp
OwotICAgICAgICAgICAgZGlkRmluaXNoKEVycm9yOjpNZXRob2ROb3RBbGxvd2VkKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGF1dG8gZXZlbnQgPSBtX2V2ZW50
U3RyZWFtLm5leHRFdmVudCgpOwotICAgICAgICBpZiAoIWV2ZW50KSB7Ci0gICAgICAgICAgICBE
RUJVR19MT0dfRVJST1IoIkVycm9yIGxvYWRpbmcgcmVzb3VyY2U6IG5leHRFdmVudCByZXR1cm4g
bnVsbCwgVVJMID0gIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIobV9jdXJyZW50UmVxdWVz
dC51cmwoKS5zdHJpbmcoKSkpOwotICAgICAgICAgICAgZGlkRmluaXNoKEVycm9yOjpOb3RGb3Vu
ZEVycm9yKTsgLy8gVE9ETzogVHVybiB0aGlzIGludG8gYSA0MDQ/Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VW
aXNpdG9yKAotICAgICAgICAgICAgW3RoaXNdKGNvbnN0IFJlcXVlc3RTZW50RXZlbnQmIGV2ZW50
KSB7Ci0gICAgICAgICAgICAgICAgcmVwbGF5UmVxdWVzdFNlbnQoZXZlbnQpOwotICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgIFt0aGlzXShjb25zdCBSZXNwb25zZVJlY2VpdmVkRXZlbnQmIGV2
ZW50KSB7Ci0gICAgICAgICAgICAgICAgcmVwbGF5UmVzcG9uc2VSZWNlaXZlZChldmVudCk7Ci0g
ICAgICAgICAgICB9LAotICAgICAgICAgICAgW3RoaXNdKGNvbnN0IFJlZGlyZWN0UmVjZWl2ZWRF
dmVudCYgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICByZXBsYXlSZWRpcmVjdFJlY2VpdmVkKGV2
ZW50KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBbdGhpc10oY29uc3QgUmVkaXJlY3RT
ZW50RXZlbnQmIGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgcmVwbGF5UmVkaXJlY3RTZW50KGV2
ZW50KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBbdGhpc10oY29uc3QgRGF0YVJlY2Vp
dmVkRXZlbnQmIGV2ZW50KSB7Ci0gICAgICAgICAgICAgICAgcmVwbGF5RGF0YVJlY2VpdmVkKGV2
ZW50KTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBbdGhpc10oY29uc3QgRmluaXNoZWRF
dmVudCYgZXZlbnQpIHsKLSAgICAgICAgICAgICAgICByZXBsYXlGaW5pc2hlZChldmVudCk7Ci0g
ICAgICAgICAgICB9KTsKLQotICAgICAgICBXVEY6OnZpc2l0KHZpc2l0b3IsICpldmVudCk7Ci0g
ICAgfSk7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlSZXF1ZXN0U2Vu
dChjb25zdCBSZXF1ZXN0U2VudEV2ZW50JiBldmVudCkKLXsKLSAgICBERUJVR19MT0coIlVSTCA9
ICIgU1RSSU5HX1NQRUNJRklFUiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmlu
ZygpKSk7Ci0KLSAgICBlbnF1ZXVlRXZlbnRIYW5kbGVyKCk7Ci19Ci0KLXZvaWQgTmV0d29ya0Rh
dGFUYXNrUmVwbGF5OjpyZXBsYXlSZXNwb25zZVJlY2VpdmVkKGNvbnN0IFJlc3BvbnNlUmVjZWl2
ZWRFdmVudCYgZXZlbnQpCi17Ci0gICAgREVCVUdfTE9HKCJVUkwgPSAiIFNUUklOR19TUEVDSUZJ
RVIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOwotCi0gICAgV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZShldmVudC5yZXNwb25zZSk7Ci0gICAgZGlk
UmVjZWl2ZVJlc3BvbnNlKFdURk1vdmUocmVzcG9uc2UpKTsKLX0KLQotdm9pZCBOZXR3b3JrRGF0
YVRhc2tSZXBsYXk6OnJlcGxheVJlZGlyZWN0UmVjZWl2ZWQoY29uc3QgUmVkaXJlY3RSZWNlaXZl
ZEV2ZW50JiBldmVudCkKLXsKLSAgICBERUJVR19MT0coIlVSTCA9ICIgU1RSSU5HX1NQRUNJRklF
UiwgREVCVUdfU1RSKG1fZmlyc3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7Ci0KLSAgICBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlY2VpdmVkUmVzcG9uc2UgPSBldmVudC5yZXNwb25zZTsK
LSAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVjZWl2ZWRSZXF1ZXN0ID0gZXZlbnQucmVx
dWVzdDsKLQotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgbV9jbGllbnQtPndpbGxQZXJmb3Jt
SFRUUFJlZGlyZWN0aW9uKFdURk1vdmUocmVjZWl2ZWRSZXNwb25zZSksIFdURk1vdmUocmVjZWl2
ZWRSZXF1ZXN0KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgdXBkYXRlZFJlcXVlc3QpIHsKLSAgICAgICAgREVC
VUdfTE9HKCJyZXBsYXlSZWRpcmVjdFJlY2VpdmVkIGNhbGxiYWNrOiBVUkwgPSAiIFNUUklOR19T
UEVDSUZJRVIsIERFQlVHX1NUUihtX2ZpcnN0UmVxdWVzdC51cmwoKS5zdHJpbmcoKSkpOwotCi0g
ICAgICAgIG1fY3VycmVudFJlcXVlc3QgPSB1cGRhdGVkUmVxdWVzdDsKLSAgICAgICAgZW5xdWV1
ZUV2ZW50SGFuZGxlcigpOwotICAgIH0pOwotfQotCi12b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxh
eTo6cmVwbGF5UmVkaXJlY3RTZW50KGNvbnN0IFJlZGlyZWN0U2VudEV2ZW50JiBldmVudCkKLXsK
LSAgICBERUJVR19MT0coIlVSTCA9ICIgU1RSSU5HX1NQRUNJRklFUiwgREVCVUdfU1RSKG1fZmly
c3RSZXF1ZXN0LnVybCgpLnN0cmluZygpKSk7Ci0KLSAgICBlbnF1ZXVlRXZlbnRIYW5kbGVyKCk7
Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpyZXBsYXlEYXRhUmVjZWl2ZWQoY29u
c3QgRGF0YVJlY2VpdmVkRXZlbnQmIGV2ZW50KQotewotICAgIERFQlVHX0xPRygiVVJMID0gIiBT
VFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkp
KTsKLQotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEYXRh
KGV2ZW50LmRhdGEuY29weVJlZigpKTsKLQotICAgIGVucXVldWVFdmVudEhhbmRsZXIoKTsKLX0K
LQotdm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OnJlcGxheUZpbmlzaGVkKGNvbnN0IEZpbmlz
aGVkRXZlbnQmIGV2ZW50KQotewotICAgIERFQlVHX0xPRygiVVJMID0gIiBTVFJJTkdfU1BFQ0lG
SUVSLCBERUJVR19TVFIobV9maXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKLQotICAgIGRp
ZEZpbmlzaChldmVudC5lcnJvcik7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5Ojpk
aWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYmIHJlc3BvbnNlKQot
ewotICAgIERFQlVHX0xPRygiVVJMID0gIiBTVFJJTkdfU1BFQ0lGSUVSLCBERUJVR19TVFIobV9m
aXJzdFJlcXVlc3QudXJsKCkuc3RyaW5nKCkpKTsKLQotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0g
ICAgbV9jbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShXVEZNb3ZlKHJlc3BvbnNlKSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oV2ViQ29yZTo6UG9saWN5QWN0aW9uIHBv
bGljeUFjdGlvbikgewotICAgICAgICBERUJVR19MT0coImRpZFJlY2VpdmVSZXNwb25zZSBjYWxs
YmFjayAoJXUpIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBvbGljeUFjdGlvbikpOwotCi0gICAg
ICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpDYW5jZWxpbmcgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6
Q29tcGxldGVkKSB7Ci0gICAgICAgICAgICBjb21wbGV0ZSgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChwb2xpY3lBY3Rpb24pIHsKLSAgICAgICAg
Y2FzZSBXZWJDb3JlOjpQb2xpY3lBY3Rpb246OlVzZToKLSAgICAgICAgICAgIGVucXVldWVFdmVu
dEhhbmRsZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFdlYkNvcmU6OlBv
bGljeUFjdGlvbjo6U3VzcGVuZDoKLSAgICAgICAgICAgIExPR19FUlJPUigiUG9saWN5QWN0aW9u
OjpTdXNwZW5kIGVuY291bnRlcmVkIC0gVHJlYXRpbmcgYXMgUG9saWN5QWN0aW9uOjpJZ25vcmUg
Zm9yIG5vdyIpOwotICAgICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgICAgIGNhc2UgV2ViQ29y
ZTo6UG9saWN5QWN0aW9uOjpJZ25vcmU6Ci0gICAgICAgICAgICBjb21wbGV0ZSgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpEb3dubG9h
ZDoKLSAgICAgICAgICAgIERFQlVHX0xPR19FUlJPUigiV2ViQ29yZTo6UG9saWN5QWN0aW9uOjpQ
b2xpY3lEb3dubG9hZCIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9KTsK
LX0KLQotdm9pZCBOZXR3b3JrRGF0YVRhc2tSZXBsYXk6OmRpZEZpbmlzaCgpCi17Ci0gICAgZGlk
RmluaXNoKHsgfSk7Ci19Ci0KLXZvaWQgTmV0d29ya0RhdGFUYXNrUmVwbGF5OjpkaWRGaW5pc2go
RXJyb3IgZXJyb3JDb2RlKQotewotICAgIGRpZEZpbmlzaChXZWJDb3JlOjpSZXNvdXJjZUVycm9y
KHdlYktpdFJlbGF5RG9tYWluLCBzdGF0aWNfY2FzdDxpbnQ+KGVycm9yQ29kZSksIG1fZmlyc3RS
ZXF1ZXN0LnVybCgpLCBTdHJpbmcoKSkpOwotfQotCi12b2lkIE5ldHdvcmtEYXRhVGFza1JlcGxh
eTo6ZGlkRmluaXNoKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQotewotICAg
IERFQlVHX0xPRygiKCVkKSIsIGVycm9yLmVycm9yQ29kZSgpKTsKLQotICAgIGNvbXBsZXRlKCk7
Ci0KLSAgICBBU1NFUlQobV9jbGllbnQpOwotICAgIG1fY2xpZW50LT5kaWRDb21wbGV0ZVdpdGhF
cnJvcihlcnJvcik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYXB0dXJlCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI3VuZGVmIERFQlVHX0NMQVNTCi0KLSNlbmRpZiAvLyBFTkFCTEUo
TkVUV09SS19DQVBUVVJFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBiZDI4YTdkMzVkYWFmOWNkOGVmNzFmOWU0Y2Q1ODFkMWNlMWUzOGFiLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3JrRGF0YVRhc2tSZXBsYXkuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
Ci0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwot
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiBFTkFCTEUoTkVUV09SS19DQVBUVVJFKQotCi0jaW5jbHVkZSAiTmV0d29ya0NhcHR1cmVSZXNv
dXJjZS5oIgotI2luY2x1ZGUgIk5ldHdvcmtEYXRhVGFzay5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VSZXF1ZXN0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFJlc291cmNl
RXJyb3I7Ci1jbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsK
LWNsYXNzIE5ldHdvcmtEYXRhVGFza0NsaWVudDsKLWNsYXNzIE5ldHdvcmtMb2FkUGFyYW1ldGVy
czsKLWNsYXNzIE5ldHdvcmtTZXNzaW9uOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLW5hbWVz
cGFjZSBOZXR3b3JrQ2FwdHVyZSB7Ci0KLXN0cnVjdCBSZXF1ZXN0U2VudEV2ZW50Owotc3RydWN0
IFJlc3BvbnNlUmVjZWl2ZWRFdmVudDsKLXN0cnVjdCBSZWRpcmVjdFJlY2VpdmVkRXZlbnQ7Ci1z
dHJ1Y3QgUmVkaXJlY3RTZW50RXZlbnQ7Ci1zdHJ1Y3QgRGF0YVJlY2VpdmVkRXZlbnQ7Ci1zdHJ1
Y3QgRmluaXNoZWRFdmVudDsKLQotY2xhc3MgTmV0d29ya0RhdGFUYXNrUmVwbGF5IDogcHVibGlj
IE5ldHdvcmtEYXRhVGFzayB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxOZXR3b3JrRGF0YVRh
c2tSZXBsYXk+IGNyZWF0ZShOZXR3b3JrU2Vzc2lvbiYgc2Vzc2lvbiwgTmV0d29ya0RhdGFUYXNr
Q2xpZW50JiBjbGllbnQsIGNvbnN0IE5ldHdvcmtMb2FkUGFyYW1ldGVycyYgcGFyYW1ldGVycywg
UmVzb3VyY2UqIHJlc291cmNlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
TmV0d29ya0RhdGFUYXNrUmVwbGF5KHNlc3Npb24sIGNsaWVudCwgcGFyYW1ldGVycywgcmVzb3Vy
Y2UpKTsKLSAgICB9Ci0KLSAgICB2b2lkIHJlcGxheVJlcXVlc3RTZW50KGNvbnN0IFJlcXVlc3RT
ZW50RXZlbnQmKTsKLSAgICB2b2lkIHJlcGxheVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgUmVzcG9u
c2VSZWNlaXZlZEV2ZW50Jik7Ci0gICAgdm9pZCByZXBsYXlSZWRpcmVjdFJlY2VpdmVkKGNvbnN0
IFJlZGlyZWN0UmVjZWl2ZWRFdmVudCYpOwotICAgIHZvaWQgcmVwbGF5UmVkaXJlY3RTZW50KGNv
bnN0IFJlZGlyZWN0U2VudEV2ZW50Jik7Ci0gICAgdm9pZCByZXBsYXlEYXRhUmVjZWl2ZWQoY29u
c3QgRGF0YVJlY2VpdmVkRXZlbnQmKTsKLSAgICB2b2lkIHJlcGxheUZpbmlzaGVkKGNvbnN0IEZp
bmlzaGVkRXZlbnQmKTsKLQotcHJpdmF0ZToKLSAgICBOZXR3b3JrRGF0YVRhc2tSZXBsYXkoTmV0
d29ya1Nlc3Npb24mLCBOZXR3b3JrRGF0YVRhc2tDbGllbnQmLCBjb25zdCBOZXR3b3JrTG9hZFBh
cmFtZXRlcnMmLCBSZXNvdXJjZSopOwotICAgIH5OZXR3b3JrRGF0YVRhc2tSZXBsYXkoKSBvdmVy
cmlkZTsKLQotICAgIHZvaWQgcmVzdW1lKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdXNwZW5kKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjYW5jZWwoKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbXBsZXRl
KCk7Ci0gICAgdm9pZCBpbnZhbGlkYXRlQW5kQ2FuY2VsKCkgb3ZlcnJpZGU7Ci0KLSAgICBTdGF0
ZSBzdGF0ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc3RhdGU7IH0KLQotICAgIHZvaWQg
ZW5xdWV1ZUV2ZW50SGFuZGxlcigpOwotCi0gICAgZW51bSBjbGFzcyBFcnJvciB7Ci0gICAgICAg
IE5vRXJyb3IgPSAwLAotICAgICAgICBOb3RGb3VuZEVycm9yID0gMSwKLSAgICAgICAgTWV0aG9k
Tm90QWxsb3dlZCA9IDUKLSAgICB9OwotCi0gICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2Vi
Q29yZTo6UmVzb3VyY2VSZXNwb25zZSYmKTsKLSAgICB2b2lkIGRpZEZpbmlzaCgpOwotICAgIHZv
aWQgZGlkRmluaXNoKEVycm9yKTsKLSAgICB2b2lkIGRpZEZpbmlzaChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZUVycm9yJik7Ci0KLSAgICBTdGF0ZSBtX3N0YXRlIHsgU3RhdGU6OlN1c3BlbmRlZCB9
OwotICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2N1cnJlbnRSZXF1ZXN0OwotICAgIFJl
c291cmNlKiBtX3Jlc291cmNlOwotICAgIFJlc291cmNlOjpFdmVudFN0cmVhbSBtX2V2ZW50U3Ry
ZWFtOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhcHR1cmUKLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKE5FVFdPUktfQ0FQVFVSRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9qc29uLmhwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9qc29uLmhwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggN2M4Njk3ODdmMTljYzZjMjNiNDIxZjljNDBhYTAxNTQzMzJhZTFhMi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL2NhcHR1cmUvanNvbi5ocHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAz
MCArMCwwIEBACi0vKgotICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBETyBOT1QgVVNFIFRI
SVMgSlNPTiBMSUJSQVJZIQotICoKLSAqIFRoaXMgSlNPTiBsaWJyYXJ5IGV4aXN0cyBhcyBhIHRl
bXBvcmFyeSBmYWNpbGl0eSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZwotICogSlNPTiBmaWxlcy4g
VWx0aW1hdGVseSwgd2Ugc2hvdWxkIGJlIHVzaW5nIHRoZSBKU09OIGZhY2lsaXRpZXMgdGhhdCBh
cmUgaW4KLSAqIEphdmFTY3JpcHRDb3JlLiBIb3dldmVyLCB0aG9zZSBhcmUgdG9vIGhlYXZ5LXdl
aWdodCBmb3Igd2hhdCB3ZSB3YW50IGluIHRoZQotICogTmV0d29ya1Byb2Nlc3MuIFRoZSBOZXR3
b3JrUHJvY2VzcyBjdXJyZW50bHkgZG9lc24ndCB1c2UgSmF2YVNjcmlwdENvcmUgYW5kCi0gKiBk
b2Vzbid0IGFsbG9jYXRlIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIG1lbW9yeS1oYW5kbGluZyBm
YWNpbGl0aWVzIHRoYXQgSlNDCi0gKiByZXF1aXJlcy4gQWxsIHdlIHdhbnQgaXMgc29tZXRoaW5n
IHRoYXQgd2lsbCBkbyB0aGUgc2ltcGxlIHN0cmVhbWluZyBhbmQKLSAqIHBhcnNpbmcgb2YgSlNP
Ti4gVG8gdWx0aW1hdGVseSBhY2hpZXZlIHRoaXMsIHdlIHdpbGwgYmUgbW9kaWZ5aW5nIHRoZQot
ICogSlNPTlBhcnNlIGluIEpTQyB0byBiZSBsaWdodGVyLXdlaWdodCwgcGVyZm9ybWluZyBqdXN0
IHRoZSBzdHJlYW1pbmcgb3IKLSAqIHBhcnNpbmcgYW5kIGxlYXZpbmcgdGhlIG1lbW9yeSBtYW5h
Z2VtZW50IGFuZCBvYmplY3QgY3JlYXRpb24gdG8gdGhlIGNhbGxlci4KLSAqIFRoaXMgd2lsbCBi
ZSBzaW1pbGFyIHRvIGhvd2UgWWFyclBhcnNlciB3b3Jrcy4gVGhlIG5ldyBKU09OUGFyc2Ugd2ls
bCBiZQotICogdXNlZCBoZXJlIGFuZCBpbiBvdGhlciBwbGFjZXMgbGlrZSBpbiBDb250ZXh0RXh0
ZW5zaW9uUGFyc2VyLiBVbnRpbCB0aGVuLCB3ZQotICogdXNlIHRoaXMgbGlicmFyeS4KLSAqCi0g
KiBJbiB0aGF0IGNvbnRleHQsIHRoaXMgbGlicmFyeSBzaG91bGQgbm90IGJlIHVzZWQgYnkgYW55
b25lIGVsc2UuIEl0IHdpbGwgYmUKLSAqIGdvaW5nIGF3YXkuIEFsc28sIGl0IGhhcyBub3QgYmVl
biB2ZXR0ZWQgZm9yIHNlY3VyaXR5IGlzc3VlcyB0aGF0IG1pZ2h0Ci0gKiBhcmlzZSBpZiBpdCB3
ZXJlIHVzZWQgaW4gYSBjb250ZXh0IHdoZXJlIGN1c3RvbWVyIGRhdGEgaXMgYmVpbmcgbWFuaXB1
bGF0ZWQuCi0gKgotICogRE8gTk9UIFVTRSBUSElTIEpTT04gTElCUkFSWSEKLSAqCi0gKiAqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgotICovCi0KLS8qCi0gICAgX18gX19fX18gX19fX18gX19fX18KLSBfX3wg
IHwgICBfX3wgICAgIHwgICB8IHwgIEpTT04gZm9yIE1vZGVybiBDKysKLXwgIHwgIHxfXyAgIHwg
IHwgIHwgfCB8IHwgIHZlcnNpb24gMi4xLjEKLXxfX19fX3xfX19fX3xfX19fX3xffF9fX3wgIGh0
dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uCi0KLUxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQg
TGljZW5zZSA8aHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVD4uCi1Db3B5cmlnaHQg
KGMpIDIwMTMtMjAxNyBOaWVscyBMb2htYW5uIDxodHRwOi8vbmxvaG1hbm4ubWU+LgotCi1QZXJt
aXNzaW9uIGlzIGhlcmVieSAgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSAgcGVyc29u
IG9idGFpbmluZyBhIGNvcHkKLW9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgIGRvY3Vt
ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAotaW4gdGhlIFNvZnR3YXJl
ICB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCAgbGltaXRhdGlvbiB0aGUg
cmlnaHRzCi10byAgdXNlLCBjb3B5LCAgbW9kaWZ5LCBtZXJnZSwgIHB1Ymxpc2gsIGRpc3RyaWJ1
dGUsICBzdWJsaWNlbnNlLCBhbmQvb3IgIHNlbGwKLWNvcGllcyAgb2YgIHRoZSBTb2Z0d2FyZSwg
IGFuZCAgdG8gIHBlcm1pdCBwZXJzb25zICB0byAgd2hvbSAgdGhlIFNvZnR3YXJlICBpcwotZnVy
bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQot
VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hh
bGwgYmUgaW5jbHVkZWQgaW4gYWxsCi1jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg
dGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgIElTIFBST1ZJREVEICJBUyAgSVMiLCBXSVRI
T1VUIFdBUlJBTlRZICBPRiBBTlkgS0lORCwgIEVYUFJFU1MgT1IKLUlNUExJRUQsICBJTkNMVURJ
TkcgQlVUICBOT1QgIExJTUlURUQgVE8gIFRIRSAgV0FSUkFOVElFUyBPRiAgTUVSQ0hBTlRBQklM
SVRZLAotRklUTkVTUyBGT1IgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCAgTk9OSU5GUklOR0VN
RU5ULiBJTiBOTyBFVkVOVCAgU0hBTEwgVEhFCi1BVVRIT1JTICBPUiBDT1BZUklHSFQgIEhPTERF
UlMgIEJFICBMSUFCTEUgRk9SICBBTlkgIENMQUlNLCAgREFNQUdFUyBPUiAgT1RIRVIKLUxJQUJJ
TElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT
RSwgQVJJU0lORyBGUk9NLAotT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB
UkUgIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCi1TT0ZUV0FSRS4KLSovCi0K
LSNpZm5kZWYgTkxPSE1BTk5fSlNPTl9IUFAKLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9IUFAKLQot
I2luY2x1ZGUgPGFsZ29yaXRobT4gLy8gYWxsX29mLCBjb3B5LCBmaWxsLCBmaW5kLCBmb3JfZWFj
aCwgbm9uZV9vZiwgcmVtb3ZlLCByZXZlcnNlLCB0cmFuc2Zvcm0KLSNpbmNsdWRlIDxhcnJheT4g
Ly8gYXJyYXkKLSNpbmNsdWRlIDxjYXNzZXJ0PiAvLyBhc3NlcnQKLSNpbmNsdWRlIDxjY3R5cGU+
IC8vIGlzZGlnaXQKLSNpbmNsdWRlIDxjaXNvNjQ2PiAvLyBhbmQsIG5vdCwgb3IKLSNpbmNsdWRl
IDxjbWF0aD4gLy8gaXNmaW5pdGUsIGxhYnMsIGxkZXhwLCBzaWduYml0Ci0jaW5jbHVkZSA8Y3N0
ZGRlZj4gLy8gbnVsbHB0cl90LCBwdHJkaWZmX3QsIHNpemVfdAotI2luY2x1ZGUgPGNzdGRpbnQ+
IC8vIGludDY0X3QsIHVpbnQ2NF90Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4gLy8gYWJvcnQsIHN0cnRv
ZCwgc3RydG9mLCBzdHJ0b2xkLCBzdHJ0b3VsLCBzdHJ0b2xsLCBzdHJ0b3VsbAotI2luY2x1ZGUg
PGNzdHJpbmc+IC8vIHN0cmxlbgotI2luY2x1ZGUgPGZvcndhcmRfbGlzdD4gLy8gZm9yd2FyZF9s
aXN0Ci0jaW5jbHVkZSA8ZnVuY3Rpb25hbD4gLy8gZnVuY3Rpb24sIGhhc2gsIGxlc3MKLSNpbmNs
dWRlIDxpbml0aWFsaXplcl9saXN0PiAvLyBpbml0aWFsaXplcl9saXN0Ci0jaW5jbHVkZSA8aW9t
YW5pcD4gLy8gc2V0dwotI2luY2x1ZGUgPGlvc3RyZWFtPiAvLyBpc3RyZWFtLCBvc3RyZWFtCi0j
aW5jbHVkZSA8aXRlcmF0b3I+IC8vIGFkdmFuY2UsIGJlZ2luLCBiYWNrX2luc2VydGVyLCBiaWRp
cmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgZGlzdGFuY2UsIGVuZCwgaW5zZXJ0ZXIsIGl0ZXJhdG9y
LCBpdGVyYXRvcl90cmFpdHMsIG5leHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLCByZXZl
cnNlX2l0ZXJhdG9yCi0jaW5jbHVkZSA8bGltaXRzPiAvLyBudW1lcmljX2xpbWl0cwotI2luY2x1
ZGUgPGxvY2FsZT4gLy8gbG9jYWxlCi0jaW5jbHVkZSA8bWFwPiAvLyBtYXAKLSNpbmNsdWRlIDxt
ZW1vcnk+IC8vIGFkZHJlc3NvZiwgYWxsb2NhdG9yLCBhbGxvY2F0b3JfdHJhaXRzLCB1bmlxdWVf
cHRyCi0jaW5jbHVkZSA8bnVtZXJpYz4gLy8gYWNjdW11bGF0ZQotI2luY2x1ZGUgPHNzdHJlYW0+
IC8vIHN0cmluZ3N0cmVhbQotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4gLy8gZG9tYWluX2Vycm9yLCBp
bnZhbGlkX2FyZ3VtZW50LCBvdXRfb2ZfcmFuZ2UKLSNpbmNsdWRlIDxzdHJpbmc+IC8vIGdldGxp
bmUsIHN0b2ksIHN0cmluZywgdG9fc3RyaW5nCi0jaW5jbHVkZSA8dHlwZV90cmFpdHM+IC8vIGFk
ZF9wb2ludGVyLCBjb25kaXRpb25hbCwgZGVjYXksIGVuYWJsZV9pZiwgZmFsc2VfdHlwZSwgaW50
ZWdyYWxfY29uc3RhbnQsIGlzX2FyaXRobWV0aWMsIGlzX2Jhc2Vfb2YsIGlzX2NvbnN0LCBpc19j
b25zdHJ1Y3RpYmxlLCBpc19jb252ZXJ0aWJsZSwgaXNfZGVmYXVsdF9jb25zdHJ1Y3RpYmxlLCBp
c19lbnVtLCBpc19mbG9hdGluZ19wb2ludCwgaXNfaW50ZWdyYWwsIGlzX25vdGhyb3dfbW92ZV9h
c3NpZ25hYmxlLCBpc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZSwgaXNfcG9pbnRlciwgaXNf
cmVmZXJlbmNlLCBpc19zYW1lLCBpc19zY2FsYXIsIGlzX3NpZ25lZCwgcmVtb3ZlX2NvbnN0LCBy
ZW1vdmVfY3YsIHJlbW92ZV9wb2ludGVyLCByZW1vdmVfcmVmZXJlbmNlLCB0cnVlX3R5cGUsIHVu
ZGVybHlpbmdfdHlwZQotI2luY2x1ZGUgPHV0aWxpdHk+IC8vIGRlY2x2YWwsIGZvcndhcmQsIG1h
a2VfcGFpciwgbW92ZSwgcGFpciwgc3dhcAotI2luY2x1ZGUgPHZlY3Rvcj4gLy8gdmVjdG9yCi0K
LS8vIGV4Y2x1ZGUgdW5zdXBwb3J0ZWQgY29tcGlsZXJzCi0jaWYgZGVmaW5lZChfX2NsYW5nX18p
Ci0gICAgI2lmIChfX2NsYW5nX21ham9yX18gKiAxMDAwMCArIF9fY2xhbmdfbWlub3JfXyAqIDEw
MCArIF9fY2xhbmdfcGF0Y2hsZXZlbF9fKSA8IDMwNDAwCi0gICAgICAgICNlcnJvciAidW5zdXBw
b3J0ZWQgQ2xhbmcgdmVyc2lvbiAtIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNv
biNzdXBwb3J0ZWQtY29tcGlsZXJzIgotICAgICNlbmRpZgotI2VsaWYgZGVmaW5lZChfX0dOVUNf
XykKLSAgICAjaWYgKF9fR05VQ19fICogMTAwMDAgKyBfX0dOVUNfTUlOT1JfXyAqIDEwMCArIF9f
R05VQ19QQVRDSExFVkVMX18pIDwgNDA5MDAKLSAgICAgICAgI2Vycm9yICJ1bnN1cHBvcnRlZCBH
Q0MgdmVyc2lvbiAtIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNvbiNzdXBwb3J0
ZWQtY29tcGlsZXJzIgotICAgICNlbmRpZgotI2VuZGlmCi0KLS8vIGRpc2FibGUgZmxvYXQtZXF1
YWwgd2FybmluZ3Mgb24gR0NDL2NsYW5nCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pIHx8IGRlZmlu
ZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19HTlVHX18pCi0gICAgI3ByYWdtYSBHQ0MgZGlhZ25v
c3RpYyBwdXNoCi0gICAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Zsb2F0LWVx
dWFsIgotI2VuZGlmCi0KLS8vIGRpc2FibGUgZG9jdW1lbnRhdGlvbiB3YXJuaW5ncyBvbiBjbGFu
ZwotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotICAgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVz
aAotICAgICNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkb2N1bWVudGF0aW9uIgot
I2VuZGlmCi0KLS8vIGFsbG93IGZvciBwb3J0YWJsZSBkZXByZWNhdGlvbiB3YXJuaW5ncwotI2lm
IGRlZmluZWQoX19jbGFuZ19fKSB8fCBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fR05V
R19fKQotICAgICNkZWZpbmUgSlNPTl9ERVBSRUNBVEVEIF9fYXR0cmlidXRlX18oKGRlcHJlY2F0
ZWQpKQotI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAjZGVmaW5lIEpTT05fREVQUkVDQVRF
RCBfX2RlY2xzcGVjKGRlcHJlY2F0ZWQpCi0jZWxzZQotICAgICNkZWZpbmUgSlNPTl9ERVBSRUNB
VEVECi0jZW5kaWYKLQotLy8gYWxsb3cgdG8gZGlzYWJsZSBleGNlcHRpb25zCi0jaWYgbm90IGRl
ZmluZWQoSlNPTl9OT0VYQ0VQVElPTikgfHwgZGVmaW5lZChfX0VYQ0VQVElPTlMpCi0gICAgI2Rl
ZmluZSBKU09OX1RIUk9XKGV4Y2VwdGlvbikgdGhyb3cgZXhjZXB0aW9uCi0gICAgI2RlZmluZSBK
U09OX1RSWSB0cnkKLSAgICAjZGVmaW5lIEpTT05fQ0FUQ0goZXhjZXB0aW9uKSBjYXRjaChleGNl
cHRpb24pCi0jZWxzZQotICAgICNkZWZpbmUgSlNPTl9USFJPVyhleGNlcHRpb24pIHN0ZDo6YWJv
cnQoKQotICAgICNkZWZpbmUgSlNPTl9UUlkgaWYodHJ1ZSkKLSAgICAjZGVmaW5lIEpTT05fQ0FU
Q0goZXhjZXB0aW9uKSBpZihmYWxzZSkKLSNlbmRpZgotCi0vKiEKLUBicmllZiBuYW1lc3BhY2Ug
Zm9yIE5pZWxzIExvaG1hbm4KLUBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25sb2htYW5uCi1Ac2lu
Y2UgdmVyc2lvbiAxLjAuMAotKi8KLW5hbWVzcGFjZSBubG9obWFubgotewotCi0vKiEKLUBicmll
ZiB1bm5hbWVkIG5hbWVzcGFjZSB3aXRoIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMKLQotVGhp
cyBuYW1lc3BhY2UgY29sbGVjdHMgc29tZSBmdW5jdGlvbnMgdGhhdCBjb3VsZCBub3QgYmUgZGVm
aW5lZCBpbnNpZGUgdGhlCi1AcmVmIGJhc2ljX2pzb24gY2xhc3MuCi0KLUBzaW5jZSB2ZXJzaW9u
IDIuMS4wCi0qLwotbmFtZXNwYWNlIGRldGFpbAotewotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCi0vLyBKU09OIHR5cGUgZW51bWVyYXRpb24gLy8KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotCi0vKiEKLUBicmllZiB0aGUgSlNPTiB0eXBlIGVudW1lcmF0aW9uCi0KLVRoaXMgZW51
bWVyYXRpb24gY29sbGVjdHMgdGhlIGRpZmZlcmVudCBKU09OIHR5cGVzLiBJdCBpcyBpbnRlcm5h
bGx5IHVzZWQgdG8KLWRpc3Rpbmd1aXNoIHRoZSBzdG9yZWQgdmFsdWVzLCBhbmQgdGhlIGZ1bmN0
aW9ucyBAcmVmIGJhc2ljX2pzb246OmlzX251bGwoKSwKLUByZWYgYmFzaWNfanNvbjo6aXNfb2Jq
ZWN0KCksIEByZWYgYmFzaWNfanNvbjo6aXNfYXJyYXkoKSwKLUByZWYgYmFzaWNfanNvbjo6aXNf
c3RyaW5nKCksIEByZWYgYmFzaWNfanNvbjo6aXNfYm9vbGVhbigpLAotQHJlZiBiYXNpY19qc29u
Ojppc19udW1iZXIoKSAod2l0aCBAcmVmIGJhc2ljX2pzb246OmlzX251bWJlcl9pbnRlZ2VyKCks
Ci1AcmVmIGJhc2ljX2pzb246OmlzX251bWJlcl91bnNpZ25lZCgpLCBhbmQgQHJlZiBiYXNpY19q
c29uOjppc19udW1iZXJfZmxvYXQoKSksCi1AcmVmIGJhc2ljX2pzb246OmlzX2Rpc2NhcmRlZCgp
LCBAcmVmIGJhc2ljX2pzb246OmlzX3ByaW1pdGl2ZSgpLCBhbmQKLUByZWYgYmFzaWNfanNvbjo6
aXNfc3RydWN0dXJlZCgpIHJlbHkgb24gaXQuCi0KLUBub3RlIFRoZXJlIGFyZSB0aHJlZSBlbnVt
ZXJhdGlvbiBlbnRyaWVzIChudW1iZXJfaW50ZWdlciwgbnVtYmVyX3Vuc2lnbmVkLCBhbmQKLW51
bWJlcl9mbG9hdCksIGJlY2F1c2UgdGhlIGxpYnJhcnkgZGlzdGluZ3Vpc2hlcyB0aGVzZSB0aHJl
ZSB0eXBlcyBmb3IgbnVtYmVyczoKLUByZWYgYmFzaWNfanNvbjo6bnVtYmVyX3Vuc2lnbmVkX3Qg
aXMgdXNlZCBmb3IgdW5zaWduZWQgaW50ZWdlcnMsCi1AcmVmIGJhc2ljX2pzb246Om51bWJlcl9p
bnRlZ2VyX3QgaXMgdXNlZCBmb3Igc2lnbmVkIGludGVnZXJzLCBhbmQKLUByZWYgYmFzaWNfanNv
bjo6bnVtYmVyX2Zsb2F0X3QgaXMgdXNlZCBmb3IgZmxvYXRpbmctcG9pbnQgbnVtYmVycyBvciB0
bwotYXBwcm94aW1hdGUgaW50ZWdlcnMgd2hpY2ggZG8gbm90IGZpdCBpbiB0aGUgbGltaXRzIG9m
IHRoZWlyIHJlc3BlY3RpdmUgdHlwZS4KLQotQHNhIEByZWYgYmFzaWNfanNvbjo6YmFzaWNfanNv
bihjb25zdCB2YWx1ZV90IHZhbHVlX3R5cGUpIC0tIGNyZWF0ZSBhIEpTT04KLXZhbHVlIHdpdGgg
dGhlIGRlZmF1bHQgdmFsdWUgZm9yIGEgZ2l2ZW4gdHlwZQotCi1Ac2luY2UgdmVyc2lvbiAxLjAu
MAotKi8KLWVudW0gY2xhc3MgdmFsdWVfdCA6IHVpbnQ4X3QKLXsKLSAgICBudWxsLCAgICAgICAg
ICAgIC8vLzwgbnVsbCB2YWx1ZQotICAgIG9iamVjdCwgICAgICAgICAgLy8vPCBvYmplY3QgKHVu
b3JkZXJlZCBzZXQgb2YgbmFtZS92YWx1ZSBwYWlycykKLSAgICBhcnJheSwgICAgICAgICAgIC8v
LzwgYXJyYXkgKG9yZGVyZWQgY29sbGVjdGlvbiBvZiB2YWx1ZXMpCi0gICAgc3RyaW5nLCAgICAg
ICAgICAvLy88IHN0cmluZyB2YWx1ZQotICAgIGJvb2xlYW4sICAgICAgICAgLy8vPCBib29sZWFu
IHZhbHVlCi0gICAgbnVtYmVyX2ludGVnZXIsICAvLy88IG51bWJlciB2YWx1ZSAoc2lnbmVkIGlu
dGVnZXIpCi0gICAgbnVtYmVyX3Vuc2lnbmVkLCAvLy88IG51bWJlciB2YWx1ZSAodW5zaWduZWQg
aW50ZWdlcikKLSAgICBudW1iZXJfZmxvYXQsICAgIC8vLzwgbnVtYmVyIHZhbHVlIChmbG9hdGlu
Zy1wb2ludCkKLSAgICBkaXNjYXJkZWQgICAgICAgIC8vLzwgZGlzY2FyZGVkIGJ5IHRoZSBwYXJz
ZXIgY2FsbGJhY2sgZnVuY3Rpb24KLX07Ci0KLS8qIQotQGJyaWVmIGNvbXBhcmlzb24gb3BlcmF0
b3IgZm9yIEpTT04gdHlwZXMKLQotUmV0dXJucyBhbiBvcmRlcmluZyB0aGF0IGlzIHNpbWlsYXIg
dG8gUHl0aG9uOgotLSBvcmRlcjogbnVsbCA8IGJvb2xlYW4gPCBudW1iZXIgPCBvYmplY3QgPCBh
cnJheSA8IHN0cmluZwotLSBmdXJ0aGVybW9yZSwgZWFjaCB0eXBlIGlzIG5vdCBzbWFsbGVyIHRo
YW4gaXRzZWxmCi0KLUBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0qLwotaW5saW5lIGJvb2wgb3BlcmF0
b3I8KGNvbnN0IHZhbHVlX3QgbGhzLCBjb25zdCB2YWx1ZV90IHJocykgbm9leGNlcHQKLXsKLSAg
ICBzdGF0aWMgY29uc3RleHByIHN0ZDo6YXJyYXk8dWludDhfdCwgOD4gb3JkZXIgPSB7ewotICAg
ICAgICAgICAgMCwgLy8gbnVsbAotICAgICAgICAgICAgMywgLy8gb2JqZWN0Ci0gICAgICAgICAg
ICA0LCAvLyBhcnJheQotICAgICAgICAgICAgNSwgLy8gc3RyaW5nCi0gICAgICAgICAgICAxLCAv
LyBib29sZWFuCi0gICAgICAgICAgICAyLCAvLyBpbnRlZ2VyCi0gICAgICAgICAgICAyLCAvLyB1
bnNpZ25lZAotICAgICAgICAgICAgMiwgLy8gZmxvYXQKLSAgICAgICAgfQotICAgIH07Ci0KLSAg
ICAvLyBkaXNjYXJkZWQgdmFsdWVzIGFyZSBub3QgY29tcGFyYWJsZQotICAgIGlmIChsaHMgPT0g
dmFsdWVfdDo6ZGlzY2FyZGVkIG9yIHJocyA9PSB2YWx1ZV90OjpkaXNjYXJkZWQpCi0gICAgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIG9yZGVyW3N0YXRpY19j
YXN0PHN0ZDo6c2l6ZV90PihsaHMpXSA8Ci0gICAgICAgICAgIG9yZGVyW3N0YXRpY19jYXN0PHN0
ZDo6c2l6ZV90PihyaHMpXTsKLX0KLQotCi0vLy8vLy8vLy8vLy8vCi0vLyBoZWxwZXJzIC8vCi0v
Ly8vLy8vLy8vLy8vCi0KLS8vIGFsaWFzIHRlbXBsYXRlcyB0byByZWR1Y2UgYm9pbGVycGxhdGUK
LXRlbXBsYXRlPGJvb2wgQiwgdHlwZW5hbWUgVCA9IHZvaWQ+Ci11c2luZyBlbmFibGVfaWZfdCA9
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPEIsIFQ+Ojp0eXBlOwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotdXNpbmcgdW5jdnJlZl90ID0gdHlwZW5hbWUgc3RkOjpyZW1vdmVfY3Y8dHlwZW5hbWUg
c3RkOjpyZW1vdmVfcmVmZXJlbmNlPFQ+Ojp0eXBlPjo6dHlwZTsKLQotLy8gdGFrZW4gZnJvbSBo
dHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjkzNjg2NC8yNjYzNzgKLXRlbXBsYXRlPHR5cGVu
YW1lIFQ+Ci11c2luZyBpc191bnNjb3BlZF9lbnVtID0KLSAgICBzdGQ6OmludGVncmFsX2NvbnN0
YW50PGJvb2wsIHN0ZDo6aXNfY29udmVydGlibGU8VCwgaW50Pjo6dmFsdWUgYW5kCi0gICAgc3Rk
Ojppc19lbnVtPFQ+Ojp2YWx1ZT47Ci0KLS8qCi1JbXBsZW1lbnRhdGlvbiBvZiB0d28gQysrMTcg
Y29uc3RydWN0czogY29uanVuY3Rpb24sIG5lZ2F0aW9uLiBUaGlzIGlzIG5lZWRlZAotdG8gYXZv
aWQgZXZhbHVhdGluZyBhbGwgdGhlIHRyYWl0cyBpbiBhIGNvbmRpdGlvbgotCi1Gb3IgZXhhbXBs
ZTogbm90IHN0ZDo6aXNfc2FtZTx2b2lkLCBUPjo6dmFsdWUgYW5kIGhhc192YWx1ZV90eXBlPFQ+
Ojp2YWx1ZQotd2lsbCBub3QgY29tcGlsZSB3aGVuIFQgPSB2b2lkIChvbiBNU1ZDIGF0IGxlYXN0
KS4gV2hlcmVhcwotY29uanVuY3Rpb248bmVnYXRpb248c3RkOjppc19zYW1lPHZvaWQsIFQ+Piwg
aGFzX3ZhbHVlX3R5cGU8VD4+Ojp2YWx1ZSB3aWxsCi1zdG9wIGV2YWx1YXRpbmcgaWYgbmVnYXRp
b248Li4uPjo6dmFsdWUgPT0gZmFsc2UKLQotUGxlYXNlIG5vdGUgdGhhdCB0aG9zZSBjb25zdHJ1
Y3RzIG11c3QgYmUgdXNlZCB3aXRoIGNhdXRpb24sIHNpbmNlIHN5bWJvbHMgY2FuCi1iZWNvbWUg
dmVyeSBsb25nIHF1aWNrbHkgKHdoaWNoIGNhbiBzbG93IGRvd24gY29tcGlsYXRpb24gYW5kIGNh
dXNlIE1TVkMKLWludGVybmFsIGNvbXBpbGVyIGVycm9ycykuIE9ubHkgdXNlIGl0IHdoZW4geW91
IGhhdmUgdG8gKHNlZSBleGFtcGxlIGFoZWFkKS4KLSovCi10ZW1wbGF0ZTxjbGFzcy4uLj4gc3Ry
dWN0IGNvbmp1bmN0aW9uIDogc3RkOjp0cnVlX3R5cGUge307Ci10ZW1wbGF0ZTxjbGFzcyBCMT4g
c3RydWN0IGNvbmp1bmN0aW9uPEIxPiA6IEIxIHt9OwotdGVtcGxhdGU8Y2xhc3MgQjEsIGNsYXNz
Li4uIEJuPgotc3RydWN0IGNvbmp1bmN0aW9uPEIxLCBCbi4uLj4gOiBzdGQ6OmNvbmRpdGlvbmFs
PGJvb2woQjE6OnZhbHVlKSwgY29uanVuY3Rpb248Qm4uLi4+LCBCMT46OnR5cGUge307Ci0KLXRl
bXBsYXRlPGNsYXNzIEI+IHN0cnVjdCBuZWdhdGlvbiA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQg
PCBib29sLCAhQjo6dmFsdWUgPiB7fTsKLQotLy8gZGlzcGF0Y2ggdXRpbGl0eSAodGFrZW4gZnJv
bSByYW5nZXMtdjMpCi10ZW1wbGF0ZTx1bnNpZ25lZCBOPiBzdHJ1Y3QgcHJpb3JpdHlfdGFnIDog
cHJpb3JpdHlfdGFnIDwgTiAtIDEgPiB7fTsKLXRlbXBsYXRlPD4gc3RydWN0IHByaW9yaXR5X3Rh
ZzwwPiB7fTsKLQotCi0vLy8vLy8vLy8vLy8vLy8vLy8KLS8vIGNvbnN0cnVjdG9ycyAvLwotLy8v
Ly8vLy8vLy8vLy8vLy8vCi0KLXRlbXBsYXRlPHZhbHVlX3Q+IHN0cnVjdCBleHRlcm5hbF9jb25z
dHJ1Y3RvcjsKLQotdGVtcGxhdGU8Pgotc3RydWN0IGV4dGVybmFsX2NvbnN0cnVjdG9yPHZhbHVl
X3Q6OmJvb2xlYW4+Ci17Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KLSAg
ICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3QoQmFzaWNKc29uVHlwZSYgaiwgdHlwZW5hbWUgQmFzaWNK
c29uVHlwZTo6Ym9vbGVhbl90IGIpIG5vZXhjZXB0Ci0gICAgewotICAgICAgICBqLm1fdHlwZSA9
IHZhbHVlX3Q6OmJvb2xlYW47Ci0gICAgICAgIGoubV92YWx1ZSA9IGI7Ci0gICAgICAgIGouYXNz
ZXJ0X2ludmFyaWFudCgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBleHRlcm5h
bF9jb25zdHJ1Y3Rvcjx2YWx1ZV90OjpzdHJpbmc+Ci17Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
QmFzaWNKc29uVHlwZT4KLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3QoQmFzaWNKc29uVHlwZSYg
aiwgY29uc3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6c3RyaW5nX3QmIHMpCi0gICAgewotICAg
ICAgICBqLm1fdHlwZSA9IHZhbHVlX3Q6OnN0cmluZzsKLSAgICAgICAgai5tX3ZhbHVlID0gczsK
LSAgICAgICAgai5hc3NlcnRfaW52YXJpYW50KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8Pgot
c3RydWN0IGV4dGVybmFsX2NvbnN0cnVjdG9yPHZhbHVlX3Q6Om51bWJlcl9mbG9hdD4KLXsKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgotICAgIHN0YXRpYyB2b2lkIGNvbnN0
cnVjdChCYXNpY0pzb25UeXBlJiBqLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpudW1iZXJfZmxv
YXRfdCB2YWwpIG5vZXhjZXB0Ci0gICAgewotICAgICAgICAvLyByZXBsYWNlIGluZmluaXR5IGFu
ZCBOQU4gYnkgbnVsbAotICAgICAgICBpZiAobm90IHN0ZDo6aXNmaW5pdGUodmFsKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgaiA9IEJhc2ljSnNvblR5cGV7fTsKLSAgICAgICAgfQotICAgICAg
ICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGoubV90eXBlID0gdmFsdWVfdDo6bnVtYmVy
X2Zsb2F0OwotICAgICAgICAgICAgai5tX3ZhbHVlID0gdmFsOwotICAgICAgICB9Ci0gICAgICAg
IGouYXNzZXJ0X2ludmFyaWFudCgpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4KLXN0cnVjdCBl
eHRlcm5hbF9jb25zdHJ1Y3Rvcjx2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ+Ci17Ci0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KLSAgICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3Qo
QmFzaWNKc29uVHlwZSYgaiwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX3Vuc2lnbmVk
X3QgdmFsKSBub2V4Y2VwdAotICAgIHsKLSAgICAgICAgai5tX3R5cGUgPSB2YWx1ZV90OjpudW1i
ZXJfdW5zaWduZWQ7Ci0gICAgICAgIGoubV92YWx1ZSA9IHZhbDsKLSAgICAgICAgai5hc3NlcnRf
aW52YXJpYW50KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IGV4dGVybmFsX2Nv
bnN0cnVjdG9yPHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyPgotewotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEJhc2ljSnNvblR5cGU+Ci0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0KEJhc2ljSnNvblR5
cGUmIGosIHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJlcl9pbnRlZ2VyX3QgdmFsKSBub2V4
Y2VwdAotICAgIHsKLSAgICAgICAgai5tX3R5cGUgPSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjsK
LSAgICAgICAgai5tX3ZhbHVlID0gdmFsOwotICAgICAgICBqLmFzc2VydF9pbnZhcmlhbnQoKTsK
LSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+Ci1zdHJ1Y3QgZXh0ZXJuYWxfY29uc3RydWN0b3I8dmFs
dWVfdDo6YXJyYXk+Ci17Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZT4KLSAg
ICBzdGF0aWMgdm9pZCBjb25zdHJ1Y3QoQmFzaWNKc29uVHlwZSYgaiwgY29uc3QgdHlwZW5hbWUg
QmFzaWNKc29uVHlwZTo6YXJyYXlfdCYgYXJyKQotICAgIHsKLSAgICAgICAgai5tX3R5cGUgPSB2
YWx1ZV90OjphcnJheTsKLSAgICAgICAgai5tX3ZhbHVlID0gYXJyOwotICAgICAgICBqLmFzc2Vy
dF9pbnZhcmlhbnQoKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25U
eXBlLCB0eXBlbmFtZSBDb21wYXRpYmxlQXJyYXlUeXBlLAotICAgICAgICAgICAgIGVuYWJsZV9p
Zl90PG5vdCBzdGQ6OmlzX3NhbWU8Q29tcGF0aWJsZUFycmF5VHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OmFycmF5
X3Q+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMD4KLSAgICBzdGF0
aWMgdm9pZCBjb25zdHJ1Y3QoQmFzaWNKc29uVHlwZSYgaiwgY29uc3QgQ29tcGF0aWJsZUFycmF5
VHlwZSYgYXJyKQotICAgIHsKLSAgICAgICAgdXNpbmcgc3RkOjpiZWdpbjsKLSAgICAgICAgdXNp
bmcgc3RkOjplbmQ7Ci0gICAgICAgIGoubV90eXBlID0gdmFsdWVfdDo6YXJyYXk7Ci0gICAgICAg
IGoubV92YWx1ZS5hcnJheSA9IGoudGVtcGxhdGUgY3JlYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5
cGU6OmFycmF5X3Q+KGJlZ2luKGFyciksIGVuZChhcnIpKTsKLSAgICAgICAgai5hc3NlcnRfaW52
YXJpYW50KCk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8Pgotc3RydWN0IGV4dGVybmFsX2NvbnN0
cnVjdG9yPHZhbHVlX3Q6Om9iamVjdD4KLXsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pz
b25UeXBlPgotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdChCYXNpY0pzb25UeXBlJiBqLCBjb25z
dCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpvYmplY3RfdCYgb2JqKQotICAgIHsKLSAgICAgICAg
ai5tX3R5cGUgPSB2YWx1ZV90OjpvYmplY3Q7Ci0gICAgICAgIGoubV92YWx1ZSA9IG9iajsKLSAg
ICAgICAgai5hc3NlcnRfaW52YXJpYW50KCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQ29tcGF0aWJsZU9iamVjdFR5cGUsCi0gICAgICAg
ICAgICAgZW5hYmxlX2lmX3Q8bm90IHN0ZDo6aXNfc2FtZTxDb21wYXRpYmxlT2JqZWN0VHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIEJhc2lj
SnNvblR5cGU6Om9iamVjdF90Pjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW50
PiA9IDA+Ci0gICAgc3RhdGljIHZvaWQgY29uc3RydWN0KEJhc2ljSnNvblR5cGUmIGosIGNvbnN0
IENvbXBhdGlibGVPYmplY3RUeXBlJiBvYmopCi0gICAgewotICAgICAgICB1c2luZyBzdGQ6OmJl
Z2luOwotICAgICAgICB1c2luZyBzdGQ6OmVuZDsKLQotICAgICAgICBqLm1fdHlwZSA9IHZhbHVl
X3Q6Om9iamVjdDsKLSAgICAgICAgai5tX3ZhbHVlLm9iamVjdCA9IGoudGVtcGxhdGUgY3JlYXRl
PHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Om9iamVjdF90PihiZWdpbihvYmopLCBlbmQob2JqKSk7
Ci0gICAgICAgIGouYXNzZXJ0X2ludmFyaWFudCgpOwotICAgIH0KLX07Ci0KLQotLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vCi0vLyBoYXNfL2lzXyBmdW5jdGlvbnMgLy8KLS8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotCi0vKiEKLUBicmllZiBIZWxwZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhl
cmUncyBhIGtleV90eXBlIGZvciBULgotCi1UaGlzIGhlbHBlciBpcyB1c2VkIHRvIHRlbGwgYXNz
b2NpYXRpdmUgY29udGFpbmVycyBhcGFydCBmcm9tIG90aGVyIGNvbnRhaW5lcnMKLXN1Y2ggYXMg
c2VxdWVuY2UgY29udGFpbmVycy4gRm9yIGluc3RhbmNlLCBgc3RkOjptYXBgIHBhc3NlcyB0aGUg
dGVzdCBhcyBpdAotY29udGFpbnMgYSBgbWFwcGVkX3R5cGVgLCB3aGVyZWFzIGBzdGQ6OnZlY3Rv
cmAgZmFpbHMgdGhlIHRlc3QuCi0KLUBzYSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83NzI4
NzI4LzI2NjM3OAotQHNpbmNlIHZlcnNpb24gMS4wLjAsIG92ZXJ3b3JrZWQgaW4gdmVyc2lvbiAy
LjAuNgotKi8KLSNkZWZpbmUgTkxPSE1BTk5fSlNPTl9IQVNfSEVMUEVSKHR5cGUpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgaGFzXyMjdHlwZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBwcml2YXRlOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlw
ZW5hbWUgPSB0eXBlbmFtZSBVOjp0eXBlPiAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
c3RhdGljIGludCBkZXRlY3QoVSAmJik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgc3RhdGljIHZvaWQgZGV0ZWN0KC4uLik7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBwdWJsaWM6ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZhbHVlID0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBzdGQ6OmlzX2lu
dGVncmFsPGRlY2x0eXBlKGRldGVjdChzdGQ6OmRlY2x2YWw8VD4oKSkpPjo6dmFsdWU7IFwKLSAg
ICB9Ci0KLU5MT0hNQU5OX0pTT05fSEFTX0hFTFBFUihtYXBwZWRfdHlwZSk7Ci1OTE9ITUFOTl9K
U09OX0hBU19IRUxQRVIoa2V5X3R5cGUpOwotTkxPSE1BTk5fSlNPTl9IQVNfSEVMUEVSKHZhbHVl
X3R5cGUpOwotTkxPSE1BTk5fSlNPTl9IQVNfSEVMUEVSKGl0ZXJhdG9yKTsKLQotI3VuZGVmIE5M
T0hNQU5OX0pTT05fSEFTX0hFTFBFUgotCi0KLXRlbXBsYXRlPGJvb2wgQiwgY2xhc3MgUmVhbFR5
cGUsIGNsYXNzIENvbXBhdGlibGVPYmplY3RUeXBlPgotc3RydWN0IGlzX2NvbXBhdGlibGVfb2Jq
ZWN0X3R5cGVfaW1wbCA6IHN0ZDo6ZmFsc2VfdHlwZSB7fTsKLQotdGVtcGxhdGU8Y2xhc3MgUmVh
bFR5cGUsIGNsYXNzIENvbXBhdGlibGVPYmplY3RUeXBlPgotc3RydWN0IGlzX2NvbXBhdGlibGVf
b2JqZWN0X3R5cGVfaW1wbDx0cnVlLCBSZWFsVHlwZSwgQ29tcGF0aWJsZU9iamVjdFR5cGU+Ci17
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHZhbHVlID0KLSAgICAgICAgc3RkOjppc19jb25z
dHJ1Y3RpYmxlPHR5cGVuYW1lIFJlYWxUeXBlOjprZXlfdHlwZSwKLSAgICAgICAgdHlwZW5hbWUg
Q29tcGF0aWJsZU9iamVjdFR5cGU6OmtleV90eXBlPjo6dmFsdWUgYW5kCi0gICAgICAgIHN0ZDo6
aXNfY29uc3RydWN0aWJsZTx0eXBlbmFtZSBSZWFsVHlwZTo6bWFwcGVkX3R5cGUsCi0gICAgICAg
IHR5cGVuYW1lIENvbXBhdGlibGVPYmplY3RUeXBlOjptYXBwZWRfdHlwZT46OnZhbHVlOwotfTsK
LQotdGVtcGxhdGU8Y2xhc3MgQmFzaWNKc29uVHlwZSwgY2xhc3MgQ29tcGF0aWJsZU9iamVjdFR5
cGU+Ci1zdHJ1Y3QgaXNfY29tcGF0aWJsZV9vYmplY3RfdHlwZQotewotICAgIHN0YXRpYyBhdXRv
IGNvbnN0ZXhwciB2YWx1ZSA9IGlzX2NvbXBhdGlibGVfb2JqZWN0X3R5cGVfaW1wbCA8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uanVuY3Rpb248bmVnYXRpb248c3RkOjpp
c19zYW1lPHZvaWQsIENvbXBhdGlibGVPYmplY3RUeXBlPj4sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaGFzX21hcHBlZF90eXBlPENvbXBhdGlibGVPYmplY3RUeXBlPiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfa2V5X3R5cGU8Q29tcGF0aWJsZU9i
amVjdFR5cGU+Pjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgQmFzaWNKc29uVHlwZTo6b2JqZWN0X3QsIENvbXBhdGlibGVPYmplY3RUeXBlID46OnZh
bHVlOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgVD4K
LXN0cnVjdCBpc19iYXNpY19qc29uX25lc3RlZF90eXBlCi17Ci0gICAgc3RhdGljIGF1dG8gY29u
c3RleHByIHZhbHVlID0gc3RkOjppc19zYW1lPFQsIHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Oml0
ZXJhdG9yPjo6dmFsdWUgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OmlzX3NhbWU8VCwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6Y29uc3RfaXRlcmF0b3I+Ojp2YWx1
ZSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxULCB0
eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpyZXZlcnNlX2l0ZXJhdG9yPjo6dmFsdWUgb3IKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8VCwgdHlwZW5hbWUgQmFz
aWNKc29uVHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvcj46OnZhbHVlIG9yCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjppc19zYW1lPFQsIHR5cGVuYW1lIEJhc2ljSnNv
blR5cGU6Ompzb25fcG9pbnRlcj46OnZhbHVlOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgQmFzaWNK
c29uVHlwZSwgY2xhc3MgQ29tcGF0aWJsZUFycmF5VHlwZT4KLXN0cnVjdCBpc19jb21wYXRpYmxl
X2FycmF5X3R5cGUKLXsKLSAgICBzdGF0aWMgYXV0byBjb25zdGV4cHIgdmFsdWUgPQotICAgICAg
ICBjb25qdW5jdGlvbjxuZWdhdGlvbjxzdGQ6OmlzX3NhbWU8dm9pZCwgQ29tcGF0aWJsZUFycmF5
VHlwZT4+LAotICAgICAgICBuZWdhdGlvbjxpc19jb21wYXRpYmxlX29iamVjdF90eXBlPAotICAg
ICAgICBCYXNpY0pzb25UeXBlLCBDb21wYXRpYmxlQXJyYXlUeXBlPj4sCi0gICAgICAgIG5lZ2F0
aW9uPHN0ZDo6aXNfY29uc3RydWN0aWJsZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpzdHJpbmdf
dCwKLSAgICAgICAgQ29tcGF0aWJsZUFycmF5VHlwZT4+LAotICAgICAgICBuZWdhdGlvbjxpc19i
YXNpY19qc29uX25lc3RlZF90eXBlPEJhc2ljSnNvblR5cGUsIENvbXBhdGlibGVBcnJheVR5cGU+
PiwKLSAgICAgICAgaGFzX3ZhbHVlX3R5cGU8Q29tcGF0aWJsZUFycmF5VHlwZT4sCi0gICAgICAg
IGhhc19pdGVyYXRvcjxDb21wYXRpYmxlQXJyYXlUeXBlPj46OnZhbHVlOwotfTsKLQotdGVtcGxh
dGU8Ym9vbCwgdHlwZW5hbWUsIHR5cGVuYW1lPgotc3RydWN0IGlzX2NvbXBhdGlibGVfaW50ZWdl
cl90eXBlX2ltcGwgOiBzdGQ6OmZhbHNlX3R5cGUge307Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFJl
YWxJbnRlZ2VyVHlwZSwgdHlwZW5hbWUgQ29tcGF0aWJsZU51bWJlckludGVnZXJUeXBlPgotc3Ry
dWN0IGlzX2NvbXBhdGlibGVfaW50ZWdlcl90eXBlX2ltcGw8dHJ1ZSwgUmVhbEludGVnZXJUeXBl
LCBDb21wYXRpYmxlTnVtYmVySW50ZWdlclR5cGU+Ci17Ci0gICAgLy8gaXMgdGhlcmUgYW4gYXNz
ZXJ0IHNvbWV3aGVyZSBvbiBvdmVyZmxvd3M/Ci0gICAgdXNpbmcgUmVhbExpbWl0cyA9IHN0ZDo6
bnVtZXJpY19saW1pdHM8UmVhbEludGVnZXJUeXBlPjsKLSAgICB1c2luZyBDb21wYXRpYmxlTGlt
aXRzID0gc3RkOjpudW1lcmljX2xpbWl0czxDb21wYXRpYmxlTnVtYmVySW50ZWdlclR5cGU+Owot
Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBhdXRvIHZhbHVlID0KLSAgICAgICAgc3RkOjppc19jb25z
dHJ1Y3RpYmxlPFJlYWxJbnRlZ2VyVHlwZSwKLSAgICAgICAgQ29tcGF0aWJsZU51bWJlckludGVn
ZXJUeXBlPjo6dmFsdWUgYW5kCi0gICAgICAgIENvbXBhdGlibGVMaW1pdHM6OmlzX2ludGVnZXIg
YW5kCi0gICAgICAgIFJlYWxMaW1pdHM6OmlzX3NpZ25lZCA9PSBDb21wYXRpYmxlTGltaXRzOjpp
c19zaWduZWQ7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBSZWFsSW50ZWdlclR5cGUsIHR5cGVu
YW1lIENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZT4KLXN0cnVjdCBpc19jb21wYXRpYmxlX2lu
dGVnZXJfdHlwZQotewotICAgIHN0YXRpYyBjb25zdGV4cHIgYXV0byB2YWx1ZSA9Ci0gICAgICAg
IGlzX2NvbXBhdGlibGVfaW50ZWdlcl90eXBlX2ltcGwgPAotICAgICAgICBzdGQ6OmlzX2ludGVn
cmFsPENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZT46OnZhbHVlIGFuZAotICAgICAgICBub3Qg
c3RkOjppc19zYW1lPGJvb2wsIENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZT46OnZhbHVlLAot
ICAgICAgICBSZWFsSW50ZWdlclR5cGUsIENvbXBhdGlibGVOdW1iZXJJbnRlZ2VyVHlwZSA+IDo6
dmFsdWU7Ci19OwotCi0KLS8vIHRyYWl0IGNoZWNraW5nIGlmIEpTT05TZXJpYWxpemVyPFQ+Ojpm
cm9tX2pzb24oanNvbiBjb25zdCYsIHVkdCYpIGV4aXN0cwotdGVtcGxhdGU8dHlwZW5hbWUgQmFz
aWNKc29uVHlwZSwgdHlwZW5hbWUgVD4KLXN0cnVjdCBoYXNfZnJvbV9qc29uCi17Ci0gIHByaXZh
dGU6Ci0gICAgLy8gYWxzbyBjaGVjayB0aGUgcmV0dXJuIHR5cGUgb2YgZnJvbV9qc29uCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVSwgdHlwZW5hbWUgPSBlbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8
dm9pZCwgZGVjbHR5cGUodW5jdnJlZl90PFU+Ojpmcm9tX2pzb24oCi0gICAgICAgICAgICAgICAg
IHN0ZDo6ZGVjbHZhbDxCYXNpY0pzb25UeXBlPigpLCBzdGQ6OmRlY2x2YWw8VCY+KCkpKT46OnZh
bHVlPj4KLSAgICBzdGF0aWMgaW50IGRldGVjdChVJiYpOwotICAgIHN0YXRpYyB2b2lkIGRldGVj
dCguLi4pOwotCi0gIHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmFsdWUgPSBz
dGQ6OmlzX2ludGVncmFsPGRlY2x0eXBlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXRlY3Qoc3RkOjpkZWNsdmFsPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OnRlbXBs
YXRlIGpzb25fc2VyaWFsaXplcjxULCB2b2lkPj4oKSkpPjo6dmFsdWU7Ci19OwotCi0vLyBUaGlz
IHRyYWl0IGNoZWNrcyBpZiBKU09OU2VyaWFsaXplcjxUPjo6ZnJvbV9qc29uKGpzb24gY29uc3Qm
KSBleGlzdHMKLS8vIHRoaXMgb3ZlcmxvYWQgaXMgdXNlZCBmb3Igbm9uLWRlZmF1bHQtY29uc3Ry
dWN0aWJsZSB1c2VyLWRlZmluZWQtdHlwZXMKLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5
cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgaGFzX25vbl9kZWZhdWx0X2Zyb21fanNvbgotewotICBw
cml2YXRlOgotICAgIHRlbXBsYXRlIDwKLSAgICAgICAgdHlwZW5hbWUgVSwKLSAgICAgICAgdHlw
ZW5hbWUgPSBlbmFibGVfaWZfdDxzdGQ6OmlzX3NhbWU8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFQsIGRlY2x0eXBlKHVuY3ZyZWZfdDxVPjo6ZnJvbV9qc29uKHN0ZDo6ZGVj
bHZhbDxCYXNpY0pzb25UeXBlPigpKSk+Ojp2YWx1ZSA+PgotICAgIHN0YXRpYyBpbnQgZGV0ZWN0
KFUmJik7Ci0gICAgc3RhdGljIHZvaWQgZGV0ZWN0KC4uLik7Ci0KLSAgcHVibGljOgotICAgIHN0
YXRpYyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9IHN0ZDo6aXNfaW50ZWdyYWw8ZGVjbHR5cGUoZGV0
ZWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmRlY2x2YWw8
dHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6dGVtcGxhdGUganNvbl9zZXJpYWxpemVyPFQsIHZvaWQ+
PigpKSk+Ojp2YWx1ZTsKLX07Ci0KLS8vIFRoaXMgdHJhaXQgY2hlY2tzIGlmIEJhc2ljSnNvblR5
cGU6Ompzb25fc2VyaWFsaXplcjxUPjo6dG9fanNvbiBleGlzdHMKLXRlbXBsYXRlPHR5cGVuYW1l
IEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIFQ+Ci1zdHJ1Y3QgaGFzX3RvX2pzb24KLXsKLSAgcHJp
dmF0ZToKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZSA9IGRlY2x0eXBlKHVuY3Zy
ZWZfdDxVPjo6dG9fanNvbigKLSAgICAgICAgICAgICAgICAgc3RkOjpkZWNsdmFsPEJhc2ljSnNv
blR5cGUmPigpLCBzdGQ6OmRlY2x2YWw8VD4oKSkpPgotICAgIHN0YXRpYyBpbnQgZGV0ZWN0KFUm
Jik7Ci0gICAgc3RhdGljIHZvaWQgZGV0ZWN0KC4uLik7Ci0KLSAgcHVibGljOgotICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCB2YWx1ZSA9IHN0ZDo6aXNfaW50ZWdyYWw8ZGVjbHR5cGUoZGV0ZWN0
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmRlY2x2YWw8dHlw
ZW5hbWUgQmFzaWNKc29uVHlwZTo6dGVtcGxhdGUganNvbl9zZXJpYWxpemVyPFQsIHZvaWQ+Pigp
KSk+Ojp2YWx1ZTsKLX07Ci0KLQotLy8vLy8vLy8vLy8vLwotLy8gdG9fanNvbiAvLwotLy8vLy8v
Ly8vLy8vLwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBULCBl
bmFibGVfaWZfdDwKLSAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8VCwgdHlwZW5hbWUgQmFzaWNK
c29uVHlwZTo6Ym9vbGVhbl90Pjo6dmFsdWUsIGludD4gPSAwPgotdm9pZCB0b19qc29uKEJhc2lj
SnNvblR5cGUmIGosIFQgYikgbm9leGNlcHQKLXsKLSAgICBleHRlcm5hbF9jb25zdHJ1Y3Rvcjx2
YWx1ZV90Ojpib29sZWFuPjo6Y29uc3RydWN0KGosIGIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBDb21wYXRpYmxlU3RyaW5nLAotICAgICAgICAgZW5h
YmxlX2lmX3Q8c3RkOjppc19jb25zdHJ1Y3RpYmxlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OnN0
cmluZ190LAotICAgICAgICAgICAgICAgICAgICAgQ29tcGF0aWJsZVN0cmluZz46OnZhbHVlLCBp
bnQ+ID0gMD4KLXZvaWQgdG9fanNvbihCYXNpY0pzb25UeXBlJiBqLCBjb25zdCBDb21wYXRpYmxl
U3RyaW5nJiBzKQotewotICAgIGV4dGVybmFsX2NvbnN0cnVjdG9yPHZhbHVlX3Q6OnN0cmluZz46
OmNvbnN0cnVjdChqLCBzKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwg
dHlwZW5hbWUgRmxvYXRUeXBlLAotICAgICAgICAgZW5hYmxlX2lmX3Q8c3RkOjppc19mbG9hdGlu
Z19wb2ludDxGbG9hdFR5cGU+Ojp2YWx1ZSwgaW50PiA9IDA+Ci12b2lkIHRvX2pzb24oQmFzaWNK
c29uVHlwZSYgaiwgRmxvYXRUeXBlIHZhbCkgbm9leGNlcHQKLXsKLSAgICBleHRlcm5hbF9jb25z
dHJ1Y3Rvcjx2YWx1ZV90OjpudW1iZXJfZmxvYXQ+Ojpjb25zdHJ1Y3Qoaiwgc3RhdGljX2Nhc3Q8
dHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX2Zsb2F0X3Q+KHZhbCkpOwotfQotCi10ZW1w
bGF0ZSA8Ci0gICAgdHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQ29tcGF0aWJsZU51
bWJlclVuc2lnbmVkVHlwZSwKLSAgICBlbmFibGVfaWZfdDxpc19jb21wYXRpYmxlX2ludGVnZXJf
dHlwZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpudW1iZXJfdW5zaWduZWRfdCwKLSAgICAgICAg
ICAgICAgICBDb21wYXRpYmxlTnVtYmVyVW5zaWduZWRUeXBlPjo6dmFsdWUsIGludD4gPSAwID4K
LXZvaWQgdG9fanNvbihCYXNpY0pzb25UeXBlJiBqLCBDb21wYXRpYmxlTnVtYmVyVW5zaWduZWRU
eXBlIHZhbCkgbm9leGNlcHQKLXsKLSAgICBleHRlcm5hbF9jb25zdHJ1Y3Rvcjx2YWx1ZV90Ojpu
dW1iZXJfdW5zaWduZWQ+Ojpjb25zdHJ1Y3Qoaiwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgQmFzaWNK
c29uVHlwZTo6bnVtYmVyX3Vuc2lnbmVkX3Q+KHZhbCkpOwotfQotCi10ZW1wbGF0ZSA8Ci0gICAg
dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQ29tcGF0aWJsZU51bWJlckludGVnZXJU
eXBlLAotICAgIGVuYWJsZV9pZl90PGlzX2NvbXBhdGlibGVfaW50ZWdlcl90eXBlPHR5cGVuYW1l
IEJhc2ljSnNvblR5cGU6Om51bWJlcl9pbnRlZ2VyX3QsCi0gICAgICAgICAgICAgICAgQ29tcGF0
aWJsZU51bWJlckludGVnZXJUeXBlPjo6dmFsdWUsIGludD4gPSAwID4KLXZvaWQgdG9fanNvbihC
YXNpY0pzb25UeXBlJiBqLCBDb21wYXRpYmxlTnVtYmVySW50ZWdlclR5cGUgdmFsKSBub2V4Y2Vw
dAotewotICAgIGV4dGVybmFsX2NvbnN0cnVjdG9yPHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyPjo6
Y29uc3RydWN0KGosIHN0YXRpY19jYXN0PHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6Om51bWJlcl9p
bnRlZ2VyX3Q+KHZhbCkpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0
eXBlbmFtZSBVbnNjb3BlZEVudW1UeXBlLAotICAgICAgICAgZW5hYmxlX2lmX3Q8aXNfdW5zY29w
ZWRfZW51bTxVbnNjb3BlZEVudW1UeXBlPjo6dmFsdWUsIGludD4gPSAwPgotdm9pZCB0b19qc29u
KEJhc2ljSnNvblR5cGUmIGosIFVuc2NvcGVkRW51bVR5cGUgZSkgbm9leGNlcHQKLXsKLSAgICBl
eHRlcm5hbF9jb25zdHJ1Y3Rvcjx2YWx1ZV90OjpudW1iZXJfaW50ZWdlcj46OmNvbnN0cnVjdChq
LCBlKTsKLX0KLQotdGVtcGxhdGUgPAotICAgIHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVu
YW1lIENvbXBhdGlibGVBcnJheVR5cGUsCi0gICAgZW5hYmxlX2lmX3QgPAotICAgICAgICBpc19j
b21wYXRpYmxlX2FycmF5X3R5cGU8QmFzaWNKc29uVHlwZSwgQ29tcGF0aWJsZUFycmF5VHlwZT46
OnZhbHVlIG9yCi0gICAgICAgIHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjph
cnJheV90LCBDb21wYXRpYmxlQXJyYXlUeXBlPjo6dmFsdWUsCi0gICAgICAgIGludCA+ID0gMCA+
Ci12b2lkIHRvX2pzb24oQmFzaWNKc29uVHlwZSYgaiwgY29uc3QgIENvbXBhdGlibGVBcnJheVR5
cGUmIGFycikKLXsKLSAgICBleHRlcm5hbF9jb25zdHJ1Y3Rvcjx2YWx1ZV90OjphcnJheT46OmNv
bnN0cnVjdChqLCBhcnIpOwotfQotCi10ZW1wbGF0ZSA8Ci0gICAgdHlwZW5hbWUgQmFzaWNKc29u
VHlwZSwgdHlwZW5hbWUgQ29tcGF0aWJsZU9iamVjdFR5cGUsCi0gICAgZW5hYmxlX2lmX3Q8aXNf
Y29tcGF0aWJsZV9vYmplY3RfdHlwZTxCYXNpY0pzb25UeXBlLCBDb21wYXRpYmxlT2JqZWN0VHlw
ZT46OnZhbHVlLAotICAgICAgICAgICAgICAgIGludD4gPSAwID4KLXZvaWQgdG9fanNvbihCYXNp
Y0pzb25UeXBlJiBqLCBjb25zdCAgQ29tcGF0aWJsZU9iamVjdFR5cGUmIGFycikKLXsKLSAgICBl
eHRlcm5hbF9jb25zdHJ1Y3Rvcjx2YWx1ZV90OjpvYmplY3Q+Ojpjb25zdHJ1Y3QoaiwgYXJyKTsK
LX0KLQotCi0vLy8vLy8vLy8vLy8vLy8KLS8vIGZyb21fanNvbiAvLwotLy8vLy8vLy8vLy8vLy8v
Ci0KLS8vIG92ZXJsb2FkcyBmb3IgYmFzaWNfanNvbiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzCi10ZW1w
bGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBBcml0aG1ldGljVHlwZSwKLSAg
ICAgICAgIGVuYWJsZV9pZl90PHN0ZDo6aXNfYXJpdGhtZXRpYzxBcml0aG1ldGljVHlwZT46OnZh
bHVlIGFuZAotICAgICAgICAgICAgICAgICAgICAgbm90IHN0ZDo6aXNfc2FtZTxBcml0aG1ldGlj
VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgQmFz
aWNKc29uVHlwZTo6Ym9vbGVhbl90Pjo6dmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICBpbnQ+
ID0gMD4KLXZvaWQgZ2V0X2FyaXRobWV0aWNfdmFsdWUoY29uc3QgQmFzaWNKc29uVHlwZSYgaiwg
QXJpdGhtZXRpY1R5cGUmIHZhbCkKLXsKLSAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PHZhbHVlX3Q+
KGopKQotICAgIHsKLSAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIHZhbCA9IHN0YXRpY19jYXN0PEFyaXRobWV0aWNUeXBlPigKLSAg
ICAgICAgICAgICAgICAgICAgICAqai50ZW1wbGF0ZSBnZXRfcHRyPGNvbnN0IHR5cGVuYW1lIEJh
c2ljSnNvblR5cGU6Om51bWJlcl91bnNpZ25lZF90Kj4oKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgotICAgICAg
ICB7Ci0gICAgICAgICAgICB2YWwgPSBzdGF0aWNfY2FzdDxBcml0aG1ldGljVHlwZT4oCi0gICAg
ICAgICAgICAgICAgICAgICAgKmoudGVtcGxhdGUgZ2V0X3B0cjxjb25zdCB0eXBlbmFtZSBCYXNp
Y0pzb25UeXBlOjpudW1iZXJfaW50ZWdlcl90Kj4oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKLSAgICAgICAgewot
ICAgICAgICAgICAgdmFsID0gc3RhdGljX2Nhc3Q8QXJpdGhtZXRpY1R5cGU+KAotICAgICAgICAg
ICAgICAgICAgICAgICpqLnRlbXBsYXRlIGdldF9wdHI8Y29uc3QgdHlwZW5hbWUgQmFzaWNKc29u
VHlwZTo6bnVtYmVyX2Zsb2F0X3QqPigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEpTT05fVEhST1coCi0g
ICAgICAgICAgICAgICAgc3RkOjpkb21haW5fZXJyb3IoInR5cGUgbXVzdCBiZSBudW1iZXIsIGJ1
dCBpcyAiICsgai50eXBlX25hbWUoKSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgotdm9pZCBmcm9tX2pzb24oY29uc3QgQmFzaWNKc29u
VHlwZSYgaiwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6Ym9vbGVhbl90JiBiKQotewotICAgIGlm
IChub3Qgai5pc19ib29sZWFuKCkpCi0gICAgewotICAgICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9t
YWluX2Vycm9yKCJ0eXBlIG11c3QgYmUgYm9vbGVhbiwgYnV0IGlzICIgKyBqLnR5cGVfbmFtZSgp
KSk7Ci0gICAgfQotICAgIGIgPSAqai50ZW1wbGF0ZSBnZXRfcHRyPGNvbnN0IHR5cGVuYW1lIEJh
c2ljSnNvblR5cGU6OmJvb2xlYW5fdCo+KCk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2lj
SnNvblR5cGU+Ci12b2lkIGZyb21fanNvbihjb25zdCBCYXNpY0pzb25UeXBlJiBqLCB0eXBlbmFt
ZSBCYXNpY0pzb25UeXBlOjpzdHJpbmdfdCYgcykKLXsKLSAgICBpZiAobm90IGouaXNfc3RyaW5n
KCkpCi0gICAgewotICAgICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9tYWluX2Vycm9yKCJ0eXBlIG11
c3QgYmUgc3RyaW5nLCBidXQgaXMgIiArIGoudHlwZV9uYW1lKCkpKTsKLSAgICB9Ci0gICAgcyA9
ICpqLnRlbXBsYXRlIGdldF9wdHI8Y29uc3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6c3RyaW5n
X3QqPigpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgotdm9pZCBmcm9t
X2pzb24oY29uc3QgQmFzaWNKc29uVHlwZSYgaiwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVt
YmVyX2Zsb2F0X3QmIHZhbCkKLXsKLSAgICBnZXRfYXJpdGhtZXRpY192YWx1ZShqLCB2YWwpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgotdm9pZCBmcm9tX2pzb24oY29u
c3QgQmFzaWNKc29uVHlwZSYgaiwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX3Vuc2ln
bmVkX3QmIHZhbCkKLXsKLSAgICBnZXRfYXJpdGhtZXRpY192YWx1ZShqLCB2YWwpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgotdm9pZCBmcm9tX2pzb24oY29uc3QgQmFz
aWNKc29uVHlwZSYgaiwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX2ludGVnZXJfdCYg
dmFsKQotewotICAgIGdldF9hcml0aG1ldGljX3ZhbHVlKGosIHZhbCk7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIFVuc2NvcGVkRW51bVR5cGUsCi0gICAg
ICAgICBlbmFibGVfaWZfdDxpc191bnNjb3BlZF9lbnVtPFVuc2NvcGVkRW51bVR5cGU+Ojp2YWx1
ZSwgaW50PiA9IDA+Ci12b2lkIGZyb21fanNvbihjb25zdCBCYXNpY0pzb25UeXBlJiBqLCBVbnNj
b3BlZEVudW1UeXBlJiBlKQotewotICAgIHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPFVu
c2NvcGVkRW51bVR5cGU+Ojp0eXBlIHZhbDsKLSAgICBnZXRfYXJpdGhtZXRpY192YWx1ZShqLCB2
YWwpOwotICAgIGUgPSBzdGF0aWNfY2FzdDxVbnNjb3BlZEVudW1UeXBlPih2YWwpOwotfQotCi10
ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlPgotdm9pZCBmcm9tX2pzb24oY29uc3QgQmFz
aWNKc29uVHlwZSYgaiwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6YXJyYXlfdCYgYXJyKQotewot
ICAgIGlmIChub3Qgai5pc19hcnJheSgpKQotICAgIHsKLSAgICAgICAgSlNPTl9USFJPVyhzdGQ6
OmRvbWFpbl9lcnJvcigidHlwZSBtdXN0IGJlIGFycmF5LCBidXQgaXMgIiArIGoudHlwZV9uYW1l
KCkpKTsKLSAgICB9Ci0gICAgYXJyID0gKmoudGVtcGxhdGUgZ2V0X3B0cjxjb25zdCB0eXBlbmFt
ZSBCYXNpY0pzb25UeXBlOjphcnJheV90Kj4oKTsKLX0KLQotLy8gZm9yd2FyZF9saXN0IGRvZXNu
J3QgaGF2ZSBhbiBpbnNlcnQgbWV0aG9kCi10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBl
LCB0eXBlbmFtZSBULCB0eXBlbmFtZSBBbGxvY2F0b3I+Ci12b2lkIGZyb21fanNvbihjb25zdCBC
YXNpY0pzb25UeXBlJiBqLCBzdGQ6OmZvcndhcmRfbGlzdDxULCBBbGxvY2F0b3I+JiBsKQotewot
ICAgIC8vIGRvIG5vdCBwZXJmb3JtIHRoZSBjaGVjayB3aGVuIHVzZXIgd2FudHMgdG8gcmV0cmll
dmUganNvbnMKLSAgICAvLyAoZXhjZXB0IHdoZW4gaXQncyBudWxsLi4gPykKLSAgICBpZiAoai5p
c19udWxsKCkpCi0gICAgewotICAgICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9tYWluX2Vycm9yKCJ0
eXBlIG11c3QgYmUgYXJyYXksIGJ1dCBpcyAiICsgai50eXBlX25hbWUoKSkpOwotICAgIH0KLSAg
ICBpZiAobm90IHN0ZDo6aXNfc2FtZTxULCBCYXNpY0pzb25UeXBlPjo6dmFsdWUpCi0gICAgewot
ICAgICAgICBpZiAobm90IGouaXNfYXJyYXkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgSlNP
Tl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigidHlwZSBtdXN0IGJlIGFycmF5LCBidXQgaXMgIiAr
IGoudHlwZV9uYW1lKCkpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBmb3IgKGF1dG8gaXQgPSBq
LnJiZWdpbigpLCBlbmQgPSBqLnJlbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgIHsKLSAgICAg
ICAgbC5wdXNoX2Zyb250KGl0LT50ZW1wbGF0ZSBnZXQ8VD4oKSk7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBDb21wYXRpYmxlQXJyYXlUeXBl
Pgotdm9pZCBmcm9tX2pzb25fYXJyYXlfaW1wbChjb25zdCBCYXNpY0pzb25UeXBlJiBqLCBDb21w
YXRpYmxlQXJyYXlUeXBlJiBhcnIsIHByaW9yaXR5X3RhZzwwPikKLXsKLSAgICB1c2luZyBzdGQ6
OmJlZ2luOwotICAgIHVzaW5nIHN0ZDo6ZW5kOwotCi0gICAgc3RkOjp0cmFuc2Zvcm0oai5iZWdp
bigpLCBqLmVuZCgpLAotICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5zZXJ0ZXIoYXJyLCBlbmQo
YXJyKSksIFtdKGNvbnN0IEJhc2ljSnNvblR5cGUgJiBpKQotICAgIHsKLSAgICAgICAgLy8gZ2V0
PEJhc2ljSnNvblR5cGU+KCkgcmV0dXJucyAqdGhpcywgdGhpcyB3b24ndCBjYWxsIGEgZnJvbV9q
c29uCi0gICAgICAgIC8vIG1ldGhvZCB3aGVuIHZhbHVlX3R5cGUgaXMgQmFzaWNKc29uVHlwZQot
ICAgICAgICByZXR1cm4gaS50ZW1wbGF0ZSBnZXQ8dHlwZW5hbWUgQ29tcGF0aWJsZUFycmF5VHlw
ZTo6dmFsdWVfdHlwZT4oKTsKLSAgICB9KTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNK
c29uVHlwZSwgdHlwZW5hbWUgQ29tcGF0aWJsZUFycmF5VHlwZT4KLWF1dG8gZnJvbV9qc29uX2Fy
cmF5X2ltcGwoY29uc3QgQmFzaWNKc29uVHlwZSYgaiwgQ29tcGF0aWJsZUFycmF5VHlwZSYgYXJy
LCBwcmlvcml0eV90YWc8MT4pCi0tPiBkZWNsdHlwZSgKLSAgICBhcnIucmVzZXJ2ZShzdGQ6OmRl
Y2x2YWw8dHlwZW5hbWUgQ29tcGF0aWJsZUFycmF5VHlwZTo6c2l6ZV90eXBlPigpKSwKLSAgICB2
b2lkKCkpCi17Ci0gICAgdXNpbmcgc3RkOjpiZWdpbjsKLSAgICB1c2luZyBzdGQ6OmVuZDsKLQot
ICAgIGFyci5yZXNlcnZlKGouc2l6ZSgpKTsKLSAgICBzdGQ6OnRyYW5zZm9ybSgKLSAgICAgICAg
ai5iZWdpbigpLCBqLmVuZCgpLCBzdGQ6Omluc2VydGVyKGFyciwgZW5kKGFycikpLCBbXShjb25z
dCBCYXNpY0pzb25UeXBlICYgaSkKLSAgICB7Ci0gICAgICAgIC8vIGdldDxCYXNpY0pzb25UeXBl
PigpIHJldHVybnMgKnRoaXMsIHRoaXMgd29uJ3QgY2FsbCBhIGZyb21fanNvbgotICAgICAgICAv
LyBtZXRob2Qgd2hlbiB2YWx1ZV90eXBlIGlzIEJhc2ljSnNvblR5cGUKLSAgICAgICAgcmV0dXJu
IGkudGVtcGxhdGUgZ2V0PHR5cGVuYW1lIENvbXBhdGlibGVBcnJheVR5cGU6OnZhbHVlX3R5cGU+
KCk7Ci0gICAgfSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVu
YW1lIENvbXBhdGlibGVBcnJheVR5cGUsCi0gICAgICAgICBlbmFibGVfaWZfdDxpc19jb21wYXRp
YmxlX2FycmF5X3R5cGU8QmFzaWNKc29uVHlwZSwgQ29tcGF0aWJsZUFycmF5VHlwZT46OnZhbHVl
IGFuZAotICAgICAgICAgICAgICAgICAgICAgbm90IHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBCYXNp
Y0pzb25UeXBlOjphcnJheV90LCBDb21wYXRpYmxlQXJyYXlUeXBlPjo6dmFsdWUsIGludD4gPSAw
Pgotdm9pZCBmcm9tX2pzb24oY29uc3QgQmFzaWNKc29uVHlwZSYgaiwgQ29tcGF0aWJsZUFycmF5
VHlwZSYgYXJyKQotewotICAgIGlmIChqLmlzX251bGwoKSkKLSAgICB7Ci0gICAgICAgIEpTT05f
VEhST1coc3RkOjpkb21haW5fZXJyb3IoInR5cGUgbXVzdCBiZSBhcnJheSwgYnV0IGlzICIgKyBq
LnR5cGVfbmFtZSgpKSk7Ci0gICAgfQotCi0gICAgLy8gd2hlbiBUID09IEJhc2ljSnNvblR5cGUs
IGRvIG5vdCBjaGVjayBpZiB2YWx1ZV90IGlzIGNvcnJlY3QKLSAgICBpZiAobm90IHN0ZDo6aXNf
c2FtZTx0eXBlbmFtZSBDb21wYXRpYmxlQXJyYXlUeXBlOjp2YWx1ZV90eXBlLCBCYXNpY0pzb25U
eXBlPjo6dmFsdWUpCi0gICAgewotICAgICAgICBpZiAobm90IGouaXNfYXJyYXkoKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigidHlwZSBtdXN0
IGJlIGFycmF5LCBidXQgaXMgIiArIGoudHlwZV9uYW1lKCkpKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBmcm9tX2pzb25fYXJyYXlfaW1wbChqLCBhcnIsIHByaW9yaXR5X3RhZzwxPiB7fSk7Ci19
Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIENvbXBhdGlibGVP
YmplY3RUeXBlLAotICAgICAgICAgZW5hYmxlX2lmX3Q8aXNfY29tcGF0aWJsZV9vYmplY3RfdHlw
ZTxCYXNpY0pzb25UeXBlLCBDb21wYXRpYmxlT2JqZWN0VHlwZT46OnZhbHVlLCBpbnQ+ID0gMD4K
LXZvaWQgZnJvbV9qc29uKGNvbnN0IEJhc2ljSnNvblR5cGUmIGosIENvbXBhdGlibGVPYmplY3RU
eXBlJiBvYmopCi17Ci0gICAgaWYgKG5vdCBqLmlzX29iamVjdCgpKQotICAgIHsKLSAgICAgICAg
SlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigidHlwZSBtdXN0IGJlIG9iamVjdCwgYnV0IGlz
ICIgKyBqLnR5cGVfbmFtZSgpKSk7Ci0gICAgfQotCi0gICAgYXV0byBpbm5lcl9vYmplY3QgPSBq
LnRlbXBsYXRlIGdldF9wdHI8Y29uc3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6b2JqZWN0X3Qq
PigpOwotICAgIHVzaW5nIHN0ZDo6YmVnaW47Ci0gICAgdXNpbmcgc3RkOjplbmQ7Ci0gICAgLy8g
d2UgY291bGQgYXZvaWQgdGhlIGFzc2lnbm1lbnQsIGJ1dCB0aGlzIG1pZ2h0IHJlcXVpcmUgYSBm
b3IgbG9vcCwgd2hpY2gKLSAgICAvLyBtaWdodCBiZSBsZXNzIGVmZmljaWVudCB0aGFuIHRoZSBj
b250YWluZXIgY29uc3RydWN0b3IgZm9yIHNvbWUKLSAgICAvLyBjb250YWluZXJzICh3b3VsZCBp
dD8pCi0gICAgb2JqID0gQ29tcGF0aWJsZU9iamVjdFR5cGUoYmVnaW4oKmlubmVyX29iamVjdCks
IGVuZCgqaW5uZXJfb2JqZWN0KSk7Ci19Ci0KLS8vIG92ZXJsb2FkIGZvciBhcml0aG1ldGljIHR5
cGVzLCBub3QgY2hvc2VuIGZvciBiYXNpY19qc29uIHRlbXBsYXRlIGFyZ3VtZW50cwotLy8gKEJv
b2xlYW5UeXBlLCBldGMuLik7IG5vdGU6IElzIGl0IHJlYWxseSBuZWNlc3NhcnkgdG8gcHJvdmlk
ZSBleHBsaWNpdAotLy8gb3ZlcmxvYWRzIGZvciBib29sZWFuX3QgZXRjLiBpbiBjYXNlIG9mIGEg
Y3VzdG9tIEJvb2xlYW5UeXBlIHdoaWNoIGlzIG5vdAotLy8gYW4gYXJpdGhtZXRpYyB0eXBlPwot
dGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgQXJpdGhtZXRpY1R5cGUs
Ci0gICAgICAgICBlbmFibGVfaWZfdCA8Ci0gICAgICAgICAgICAgc3RkOjppc19hcml0aG1ldGlj
PEFyaXRobWV0aWNUeXBlPjo6dmFsdWUgYW5kCi0gICAgICAgICAgICAgbm90IHN0ZDo6aXNfc2Ft
ZTxBcml0aG1ldGljVHlwZSwgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX3Vuc2lnbmVk
X3Q+Ojp2YWx1ZSBhbmQKLSAgICAgICAgICAgICBub3Qgc3RkOjppc19zYW1lPEFyaXRobWV0aWNU
eXBlLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpudW1iZXJfaW50ZWdlcl90Pjo6dmFsdWUgYW5k
Ci0gICAgICAgICAgICAgbm90IHN0ZDo6aXNfc2FtZTxBcml0aG1ldGljVHlwZSwgdHlwZW5hbWUg
QmFzaWNKc29uVHlwZTo6bnVtYmVyX2Zsb2F0X3Q+Ojp2YWx1ZSBhbmQKLSAgICAgICAgICAgICBu
b3Qgc3RkOjppc19zYW1lPEFyaXRobWV0aWNUeXBlLCB0eXBlbmFtZSBCYXNpY0pzb25UeXBlOjpi
b29sZWFuX3Q+Ojp2YWx1ZSwKLSAgICAgICAgICAgICBpbnQ+ID0gMD4KLXZvaWQgZnJvbV9qc29u
KGNvbnN0IEJhc2ljSnNvblR5cGUmIGosIEFyaXRobWV0aWNUeXBlJiB2YWwpCi17Ci0gICAgc3dp
dGNoIChzdGF0aWNfY2FzdDx2YWx1ZV90PihqKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgdmFsdWVf
dDo6bnVtYmVyX3Vuc2lnbmVkOgotICAgICAgICB7Ci0gICAgICAgICAgICB2YWwgPSBzdGF0aWNf
Y2FzdDxBcml0aG1ldGljVHlwZT4oKmoudGVtcGxhdGUgZ2V0X3B0cjxjb25zdCB0eXBlbmFtZSBC
YXNpY0pzb25UeXBlOjpudW1iZXJfdW5zaWduZWRfdCo+KCkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKLSAgICAg
ICAgewotICAgICAgICAgICAgdmFsID0gc3RhdGljX2Nhc3Q8QXJpdGhtZXRpY1R5cGU+KCpqLnRl
bXBsYXRlIGdldF9wdHI8Y29uc3QgdHlwZW5hbWUgQmFzaWNKc29uVHlwZTo6bnVtYmVyX2ludGVn
ZXJfdCo+KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSB2
YWx1ZV90OjpudW1iZXJfZmxvYXQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbCA9IHN0YXRp
Y19jYXN0PEFyaXRobWV0aWNUeXBlPigqai50ZW1wbGF0ZSBnZXRfcHRyPGNvbnN0IHR5cGVuYW1l
IEJhc2ljSnNvblR5cGU6Om51bWJlcl9mbG9hdF90Kj4oKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHZhbCA9IHN0YXRpY19jYXN0PEFyaXRobWV0aWNUeXBlPigqai50ZW1wbGF0ZSBn
ZXRfcHRyPGNvbnN0IHR5cGVuYW1lIEJhc2ljSnNvblR5cGU6OmJvb2xlYW5fdCo+KCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgewot
ICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigidHlwZSBtdXN0IGJlIG51
bWJlciwgYnV0IGlzICIgKyBqLnR5cGVfbmFtZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXN0cnVjdCB0b19qc29uX2ZuCi17Ci0gIHByaXZhdGU6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
QmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgVD4KLSAgICBhdXRvIGNhbGwoQmFzaWNKc29uVHlwZSYg
aiwgVCYmIHZhbCwgcHJpb3JpdHlfdGFnPDE+KSBjb25zdCBub2V4Y2VwdChub2V4Y2VwdCh0b19q
c29uKGosIHN0ZDo6Zm9yd2FyZDxUPih2YWwpKSkpCi0gICAgLT4gZGVjbHR5cGUodG9fanNvbihq
LCBzdGQ6OmZvcndhcmQ8VD4odmFsKSksIHZvaWQoKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
b19qc29uKGosIHN0ZDo6Zm9yd2FyZDxUPih2YWwpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0eXBlbmFtZSBUPgotICAgIHZvaWQgY2FsbChCYXNpY0pz
b25UeXBlJiwgVCYmLCBwcmlvcml0eV90YWc8MD4pIGNvbnN0IG5vZXhjZXB0Ci0gICAgewotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihCYXNpY0pzb25UeXBlKSA9PSAwLAotICAgICAgICAg
ICAgICAgICAgICAgICJjb3VsZCBub3QgZmluZCB0b19qc29uKCkgbWV0aG9kIGluIFQncyBuYW1l
c3BhY2UiKTsKLSAgICB9Ci0KLSAgcHVibGljOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJhc2lj
SnNvblR5cGUsIHR5cGVuYW1lIFQ+Ci0gICAgdm9pZCBvcGVyYXRvcigpKEJhc2ljSnNvblR5cGUm
IGosIFQmJiB2YWwpIGNvbnN0Ci0gICAgbm9leGNlcHQobm9leGNlcHQoc3RkOjpkZWNsdmFsPHRv
X2pzb25fZm4+KCkuY2FsbChqLCBzdGQ6OmZvcndhcmQ8VD4odmFsKSwgcHJpb3JpdHlfdGFnPDE+
IHt9KSkpCi0gICAgewotICAgICAgICByZXR1cm4gY2FsbChqLCBzdGQ6OmZvcndhcmQ8VD4odmFs
KSwgcHJpb3JpdHlfdGFnPDE+IHt9KTsKLSAgICB9Ci19OwotCi1zdHJ1Y3QgZnJvbV9qc29uX2Zu
Ci17Ci0gIHByaXZhdGU6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlw
ZW5hbWUgVD4KLSAgICBhdXRvIGNhbGwoY29uc3QgQmFzaWNKc29uVHlwZSYgaiwgVCYgdmFsLCBw
cmlvcml0eV90YWc8MT4pIGNvbnN0Ci0gICAgbm9leGNlcHQobm9leGNlcHQoZnJvbV9qc29uKGos
IHZhbCkpKQotICAgIC0+IGRlY2x0eXBlKGZyb21fanNvbihqLCB2YWwpLCB2b2lkKCkpCi0gICAg
ewotICAgICAgICByZXR1cm4gZnJvbV9qc29uKGosIHZhbCk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGU8dHlwZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgVD4KLSAgICB2b2lkIGNhbGwoY29u
c3QgQmFzaWNKc29uVHlwZSYsIFQmLCBwcmlvcml0eV90YWc8MD4pIGNvbnN0IG5vZXhjZXB0Ci0g
ICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihCYXNpY0pzb25UeXBlKSA9PSAwLAot
ICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZmluZCBmcm9tX2pzb24oKSBtZXRob2Qg
aW4gVCdzIG5hbWVzcGFjZSIpOwotICAgIH0KLQotICBwdWJsaWM6Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgQmFzaWNKc29uVHlwZSwgdHlwZW5hbWUgVD4KLSAgICB2b2lkIG9wZXJhdG9yKCkoY29u
c3QgQmFzaWNKc29uVHlwZSYgaiwgVCYgdmFsKSBjb25zdAotICAgIG5vZXhjZXB0KG5vZXhjZXB0
KHN0ZDo6ZGVjbHZhbDxmcm9tX2pzb25fZm4+KCkuY2FsbChqLCB2YWwsIHByaW9yaXR5X3RhZzwx
PiB7fSkpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGNhbGwoaiwgdmFsLCBwcmlvcml0eV90YWc8
MT4ge30pOwotICAgIH0KLX07Ci0KLS8vIHRha2VuIGZyb20gcmFuZ2VzLXYzCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotc3RydWN0IHN0YXRpY19jb25zdAotewotICAgIHN0YXRpYyBjb25zdGV4cHIg
VCB2YWx1ZXt9OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNvbnN0ZXhwciBUIHN0YXRp
Y19jb25zdDxUPjo6dmFsdWU7Ci19IC8vIG5hbWVzcGFjZSBkZXRhaWwKLQotCi0vLy8gbmFtZXNw
YWNlIHRvIGhvbGQgZGVmYXVsdCBgdG9fanNvbmAgLyBgZnJvbV9qc29uYCBmdW5jdGlvbnMKLW5h
bWVzcGFjZQotewotY29uc3RleHByIGNvbnN0IGF1dG8mIHRvX2pzb24gPSBkZXRhaWw6OnN0YXRp
Y19jb25zdDxkZXRhaWw6OnRvX2pzb25fZm4+Ojp2YWx1ZTsKLWNvbnN0ZXhwciBjb25zdCBhdXRv
JiBmcm9tX2pzb24gPSBkZXRhaWw6OnN0YXRpY19jb25zdDxkZXRhaWw6OmZyb21fanNvbl9mbj46
OnZhbHVlOwotfQotCi0KLS8qIQotQGJyaWVmIGRlZmF1bHQgSlNPTlNlcmlhbGl6ZXIgdGVtcGxh
dGUgYXJndW1lbnQKLQotVGhpcyBzZXJpYWxpemVyIGlnbm9yZXMgdGhlIHRlbXBsYXRlIGFyZ3Vt
ZW50cyBhbmQgdXNlcyBBREwKLShbYXJndW1lbnQtZGVwZW5kZW50IGxvb2t1cF0oaHR0cDovL2Vu
LmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvbGFuZ3VhZ2UvYWRsKSkKLWZvciBzZXJpYWxpemF0aW9u
LgotKi8KLXRlbXBsYXRlPHR5cGVuYW1lID0gdm9pZCwgdHlwZW5hbWUgPSB2b2lkPgotc3RydWN0
IGFkbF9zZXJpYWxpemVyCi17Ci0gICAgLyohCi0gICAgQGJyaWVmIGNvbnZlcnQgYSBKU09OIHZh
bHVlIHRvIGFueSB2YWx1ZSB0eXBlCi0KLSAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2Fs
bGVkIGJ5IHRoZSBgZ2V0KClgIGZ1bmN0aW9uIG9mIHRoZQotICAgIEByZWYgYmFzaWNfanNvbiBj
bGFzcyAoZWl0aGVyIGV4cGxpY2l0IG9yIHZpYSBjb252ZXJzaW9uIG9wZXJhdG9ycykuCi0KLSAg
ICBAcGFyYW1baW5dIGogICAgICAgICBKU09OIHZhbHVlIHRvIHJlYWQgZnJvbQotICAgIEBwYXJh
bVtpbixvdXRdIHZhbCAgdmFsdWUgdG8gd3JpdGUgdG8KLSAgICAqLwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEJhc2ljSnNvblR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4KLSAgICBzdGF0aWMgdm9p
ZCBmcm9tX2pzb24oQmFzaWNKc29uVHlwZSYmIGosIFZhbHVlVHlwZSYgdmFsKSBub2V4Y2VwdCgK
LSAgICAgICAgbm9leGNlcHQoOjpubG9obWFubjo6ZnJvbV9qc29uKHN0ZDo6Zm9yd2FyZDxCYXNp
Y0pzb25UeXBlPihqKSwgdmFsKSkpCi0gICAgewotICAgICAgICA6Om5sb2htYW5uOjpmcm9tX2pz
b24oc3RkOjpmb3J3YXJkPEJhc2ljSnNvblR5cGU+KGopLCB2YWwpOwotICAgIH0KLQotICAgIC8q
IQotICAgIEBicmllZiBjb252ZXJ0IGFueSB2YWx1ZSB0eXBlIHRvIGEgSlNPTiB2YWx1ZQotCi0g
ICAgVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBieSB0aGUgY29uc3RydWN0b3JzIG9m
IHRoZSBAcmVmIGJhc2ljX2pzb24KLSAgICBjbGFzcy4KLQotICAgIEBwYXJhbVtpbixvdXRdIGog
IEpTT04gdmFsdWUgdG8gd3JpdGUgdG8KLSAgICBAcGFyYW1baW5dIHZhbCAgICAgdmFsdWUgdG8g
cmVhZCBmcm9tCi0gICAgKi8KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0pzb25UeXBlLCB0
eXBlbmFtZSBWYWx1ZVR5cGU+Ci0gICAgc3RhdGljIHZvaWQgdG9fanNvbihCYXNpY0pzb25UeXBl
JiBqLCBWYWx1ZVR5cGUmJiB2YWwpIG5vZXhjZXB0KAotICAgICAgICBub2V4Y2VwdCg6Om5sb2ht
YW5uOjp0b19qc29uKGosIHN0ZDo6Zm9yd2FyZDxWYWx1ZVR5cGU+KHZhbCkpKSkKLSAgICB7Ci0g
ICAgICAgIDo6bmxvaG1hbm46OnRvX2pzb24oaiwgc3RkOjpmb3J3YXJkPFZhbHVlVHlwZT4odmFs
KSk7Ci0gICAgfQotfTsKLQotCi0vKiEKLUBicmllZiBhIGNsYXNzIHRvIHN0b3JlIEpTT04gdmFs
dWVzCi0KLUB0cGFyYW0gT2JqZWN0VHlwZSB0eXBlIGZvciBKU09OIG9iamVjdHMgKGBzdGQ6Om1h
cGAgYnkgZGVmYXVsdDsgd2lsbCBiZSB1c2VkCi1pbiBAcmVmIG9iamVjdF90KQotQHRwYXJhbSBB
cnJheVR5cGUgdHlwZSBmb3IgSlNPTiBhcnJheXMgKGBzdGQ6OnZlY3RvcmAgYnkgZGVmYXVsdDsg
d2lsbCBiZSB1c2VkCi1pbiBAcmVmIGFycmF5X3QpCi1AdHBhcmFtIFN0cmluZ1R5cGUgdHlwZSBm
b3IgSlNPTiBzdHJpbmdzIGFuZCBvYmplY3Qga2V5cyAoYHN0ZDo6c3RyaW5nYCBieQotZGVmYXVs
dDsgd2lsbCBiZSB1c2VkIGluIEByZWYgc3RyaW5nX3QpCi1AdHBhcmFtIEJvb2xlYW5UeXBlIHR5
cGUgZm9yIEpTT04gYm9vbGVhbnMgKGBib29sYCBieSBkZWZhdWx0OyB3aWxsIGJlIHVzZWQKLWlu
IEByZWYgYm9vbGVhbl90KQotQHRwYXJhbSBOdW1iZXJJbnRlZ2VyVHlwZSB0eXBlIGZvciBKU09O
IGludGVnZXIgbnVtYmVycyAoYGludDY0X3RgIGJ5Ci1kZWZhdWx0OyB3aWxsIGJlIHVzZWQgaW4g
QHJlZiBudW1iZXJfaW50ZWdlcl90KQotQHRwYXJhbSBOdW1iZXJVbnNpZ25lZFR5cGUgdHlwZSBm
b3IgSlNPTiB1bnNpZ25lZCBpbnRlZ2VyIG51bWJlcnMgKEBjCi1gdWludDY0X3RgIGJ5IGRlZmF1
bHQ7IHdpbGwgYmUgdXNlZCBpbiBAcmVmIG51bWJlcl91bnNpZ25lZF90KQotQHRwYXJhbSBOdW1i
ZXJGbG9hdFR5cGUgdHlwZSBmb3IgSlNPTiBmbG9hdGluZy1wb2ludCBudW1iZXJzIChgZG91Ymxl
YCBieQotZGVmYXVsdDsgd2lsbCBiZSB1c2VkIGluIEByZWYgbnVtYmVyX2Zsb2F0X3QpCi1AdHBh
cmFtIEFsbG9jYXRvclR5cGUgdHlwZSBvZiB0aGUgYWxsb2NhdG9yIHRvIHVzZSAoYHN0ZDo6YWxs
b2NhdG9yYCBieQotZGVmYXVsdCkKLUB0cGFyYW0gSlNPTlNlcmlhbGl6ZXIgdGhlIHNlcmlhbGl6
ZXIgdG8gcmVzb2x2ZSBpbnRlcm5hbCBjYWxscyB0byBgdG9fanNvbigpYAotYW5kIGBmcm9tX2pz
b24oKWAgKEByZWYgYWRsX3NlcmlhbGl6ZXIgYnkgZGVmYXVsdCkKLQotQHJlcXVpcmVtZW50IFRo
ZSBjbGFzcyBzYXRpc2ZpZXMgdGhlIGZvbGxvd2luZyBjb25jZXB0IHJlcXVpcmVtZW50czoKLS0g
QmFzaWMKLSAtIFtEZWZhdWx0Q29uc3RydWN0aWJsZV0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5j
b20vdy9jcHAvY29uY2VwdC9EZWZhdWx0Q29uc3RydWN0aWJsZSk6Ci0gICBKU09OIHZhbHVlcyBj
YW4gYmUgZGVmYXVsdCBjb25zdHJ1Y3RlZC4gVGhlIHJlc3VsdCB3aWxsIGJlIGEgSlNPTiBudWxs
Ci0gICB2YWx1ZS4KLSAtIFtNb3ZlQ29uc3RydWN0aWJsZV0oaHR0cDovL2VuLmNwcHJlZmVyZW5j
ZS5jb20vdy9jcHAvY29uY2VwdC9Nb3ZlQ29uc3RydWN0aWJsZSk6Ci0gICBBIEpTT04gdmFsdWUg
Y2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gYW4gcnZhbHVlIGFyZ3VtZW50LgotIC0gW0NvcHlDb25z
dHJ1Y3RpYmxlXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L0NvcHlD
b25zdHJ1Y3RpYmxlKToKLSAgIEEgSlNPTiB2YWx1ZSBjYW4gYmUgY29weS1jb25zdHJ1Y3RlZCBm
cm9tIGFuIGx2YWx1ZSBleHByZXNzaW9uLgotIC0gW01vdmVBc3NpZ25hYmxlXShodHRwOi8vZW4u
Y3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L01vdmVBc3NpZ25hYmxlKToKLSAgIEEgSlNP
TiB2YWx1ZSB2YW4gYmUgYXNzaWduZWQgZnJvbSBhbiBydmFsdWUgYXJndW1lbnQuCi0gLSBbQ29w
eUFzc2lnbmFibGVdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvQ29w
eUFzc2lnbmFibGUpOgotICAgQSBKU09OIHZhbHVlIGNhbiBiZSBjb3B5LWFzc2lnbmVkIGZyb20g
YW4gbHZhbHVlIGV4cHJlc3Npb24uCi0gLSBbRGVzdHJ1Y3RpYmxlXShodHRwOi8vZW4uY3BwcmVm
ZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L0Rlc3RydWN0aWJsZSk6Ci0gICBKU09OIHZhbHVlcyBj
YW4gYmUgZGVzdHJ1Y3RlZC4KLS0gTGF5b3V0Ci0gLSBbU3RhbmRhcmRMYXlvdXRUeXBlXShodHRw
Oi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L1N0YW5kYXJkTGF5b3V0VHlwZSk6
Ci0gICBKU09OIHZhbHVlcyBoYXZlCi0gICBbc3RhbmRhcmQgbGF5b3V0XShodHRwOi8vZW4uY3Bw
cmVmZXJlbmNlLmNvbS93L2NwcC9sYW5ndWFnZS9kYXRhX21lbWJlcnMjU3RhbmRhcmRfbGF5b3V0
KToKLSAgIEFsbCBub24tc3RhdGljIGRhdGEgbWVtYmVycyBhcmUgcHJpdmF0ZSBhbmQgc3RhbmRh
cmQgbGF5b3V0IHR5cGVzLCB0aGUKLSAgIGNsYXNzIGhhcyBubyB2aXJ0dWFsIGZ1bmN0aW9ucyBv
ciAodmlydHVhbCkgYmFzZSBjbGFzc2VzLgotLSBMaWJyYXJ5LXdpZGUKLSAtIFtFcXVhbGl0eUNv
bXBhcmFibGVdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvRXF1YWxp
dHlDb21wYXJhYmxlKToKLSAgIEpTT04gdmFsdWVzIGNhbiBiZSBjb21wYXJlZCB3aXRoIGA9PWAs
IHNlZSBAcmVmCi0gICBvcGVyYXRvcj09KGNvbnN0X3JlZmVyZW5jZSxjb25zdF9yZWZlcmVuY2Up
LgotIC0gW0xlc3NUaGFuQ29tcGFyYWJsZV0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9j
cHAvY29uY2VwdC9MZXNzVGhhbkNvbXBhcmFibGUpOgotICAgSlNPTiB2YWx1ZXMgY2FuIGJlIGNv
bXBhcmVkIHdpdGggYDxgLCBzZWUgQHJlZgotICAgb3BlcmF0b3I8KGNvbnN0X3JlZmVyZW5jZSxj
b25zdF9yZWZlcmVuY2UpLgotIC0gW1N3YXBwYWJsZV0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5j
b20vdy9jcHAvY29uY2VwdC9Td2FwcGFibGUpOgotICAgQW55IEpTT04gbHZhbHVlIG9yIHJ2YWx1
ZSBvZiBjYW4gYmUgc3dhcHBlZCB3aXRoIGFueSBsdmFsdWUgb3IgcnZhbHVlIG9mCi0gICBvdGhl
ciBjb21wYXRpYmxlIHR5cGVzLCB1c2luZyB1bnF1YWxpZmllZCBmdW5jdGlvbiBjYWxsIEByZWYg
c3dhcCgpLgotIC0gW051bGxhYmxlUG9pbnRlcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20v
dy9jcHAvY29uY2VwdC9OdWxsYWJsZVBvaW50ZXIpOgotICAgSlNPTiB2YWx1ZXMgY2FuIGJlIGNv
bXBhcmVkIGFnYWluc3QgYHN0ZDo6bnVsbHB0cl90YCBvYmplY3RzIHdoaWNoIGFyZSB1c2VkCi0g
ICB0byBtb2RlbCB0aGUgYG51bGxgIHZhbHVlLgotLSBDb250YWluZXIKLSAtIFtDb250YWluZXJd
KGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvQ29udGFpbmVyKToKLSAg
IEpTT04gdmFsdWVzIGNhbiBiZSB1c2VkIGxpa2UgU1RMIGNvbnRhaW5lcnMgYW5kIHByb3ZpZGUg
aXRlcmF0b3IgYWNjZXNzLgotIC0gW1JldmVyc2libGVDb250YWluZXJdKGh0dHA6Ly9lbi5jcHBy
ZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvUmV2ZXJzaWJsZUNvbnRhaW5lcik7Ci0gICBKU09O
IHZhbHVlcyBjYW4gYmUgdXNlZCBsaWtlIFNUTCBjb250YWluZXJzIGFuZCBwcm92aWRlIHJldmVy
c2UgaXRlcmF0b3IKLSAgIGFjY2Vzcy4KLQotQGludmFyaWFudCBUaGUgbWVtYmVyIHZhcmlhYmxl
cyBAYSBtX3ZhbHVlIGFuZCBAYSBtX3R5cGUgaGF2ZSB0aGUgZm9sbG93aW5nCi1yZWxhdGlvbnNo
aXA6Ci0tIElmIGBtX3R5cGUgPT0gdmFsdWVfdDo6b2JqZWN0YCwgdGhlbiBgbV92YWx1ZS5vYmpl
Y3QgIT0gbnVsbHB0cmAuCi0tIElmIGBtX3R5cGUgPT0gdmFsdWVfdDo6YXJyYXlgLCB0aGVuIGBt
X3ZhbHVlLmFycmF5ICE9IG51bGxwdHJgLgotLSBJZiBgbV90eXBlID09IHZhbHVlX3Q6OnN0cmlu
Z2AsIHRoZW4gYG1fdmFsdWUuc3RyaW5nICE9IG51bGxwdHJgLgotVGhlIGludmFyaWFudHMgYXJl
IGNoZWNrZWQgYnkgbWVtYmVyIGZ1bmN0aW9uIGFzc2VydF9pbnZhcmlhbnQoKS4KLQotQGludGVy
bmFsCi1Abm90ZSBPYmplY3RUeXBlIHRyaWNrIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29t
L2EvOTg2MDkxMQotQGVuZGludGVybmFsCi0KLUBzZWUgW1JGQyA3MTU5OiBUaGUgSmF2YVNjcmlw
dCBPYmplY3QgTm90YXRpb24gKEpTT04pIERhdGEgSW50ZXJjaGFuZ2UKLUZvcm1hdF0oaHR0cDov
L3JmYzcxNTkubmV0L3JmYzcxNTkpCi0KLUBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0KLUBub3N1Ymdy
b3VwaW5nCi0qLwotdGVtcGxhdGUgPAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFYsIHR5cGVuYW1lLi4uIEFyZ3M+IGNsYXNzIE9iamVjdFR5cGUgPSBzdGQ6Om1hcCwKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZS4uLiBBcmdzPiBjbGFzcyBBcnJheVR5cGUgPSBz
dGQ6OnZlY3RvciwKLSAgICBjbGFzcyBTdHJpbmdUeXBlID0gc3RkOjpzdHJpbmcsCi0gICAgY2xh
c3MgQm9vbGVhblR5cGUgPSBib29sLAotICAgIGNsYXNzIE51bWJlckludGVnZXJUeXBlID0gc3Rk
OjppbnQ2NF90LAotICAgIGNsYXNzIE51bWJlclVuc2lnbmVkVHlwZSA9IHN0ZDo6dWludDY0X3Qs
Ci0gICAgY2xhc3MgTnVtYmVyRmxvYXRUeXBlID0gZG91YmxlLAotICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFU+IGNsYXNzIEFsbG9jYXRvclR5cGUgPSBzdGQ6OmFsbG9jYXRvciwKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBTRklOQUUgPSB2b2lkPiBjbGFzcyBKU09OU2VyaWFsaXpl
ciA9IGFkbF9zZXJpYWxpemVyCi0gICAgPgotY2xhc3MgYmFzaWNfanNvbgotewotICBwcml2YXRl
OgotICAgIHRlbXBsYXRlPGRldGFpbDo6dmFsdWVfdD4gZnJpZW5kIHN0cnVjdCBkZXRhaWw6OmV4
dGVybmFsX2NvbnN0cnVjdG9yOwotICAgIC8vLyB3b3JrYXJvdW5kIHR5cGUgZm9yIE1TVkMKLSAg
ICB1c2luZyBiYXNpY19qc29uX3QgPSBiYXNpY19qc29uPE9iamVjdFR5cGUsIEFycmF5VHlwZSwg
U3RyaW5nVHlwZSwKLSAgICAgICAgICBCb29sZWFuVHlwZSwgTnVtYmVySW50ZWdlclR5cGUsIE51
bWJlclVuc2lnbmVkVHlwZSwgTnVtYmVyRmxvYXRUeXBlLAotICAgICAgICAgIEFsbG9jYXRvclR5
cGUsIEpTT05TZXJpYWxpemVyPjsKLQotICBwdWJsaWM6Ci0gICAgdXNpbmcgdmFsdWVfdCA9IGRl
dGFpbDo6dmFsdWVfdDsKLSAgICAvLyBmb3J3YXJkIGRlY2xhcmF0aW9ucwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFU+IGNsYXNzIGl0ZXJfaW1wbDsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNl
PiBjbGFzcyBqc29uX3JldmVyc2VfaXRlcmF0b3I7Ci0gICAgY2xhc3MganNvbl9wb2ludGVyOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFNGSU5BRT4KLSAgICB1c2luZyBqc29u
X3NlcmlhbGl6ZXIgPSBKU09OU2VyaWFsaXplcjxULCBTRklOQUU+OwotCi0gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0gICAgLy8gY29udGFpbmVyIHR5cGVzIC8vCi0gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0KLSAgICAvLy8gQG5hbWUgY29udGFpbmVyIHR5cGVzCi0gICAgLy8vIFRoZSBj
YW5vbmljIGNvbnRhaW5lciB0eXBlcyB0byB1c2UgQHJlZiBiYXNpY19qc29uIGxpa2UgYW55IG90
aGVyIFNUTAotICAgIC8vLyBjb250YWluZXIuCi0gICAgLy8vIEB7Ci0KLSAgICAvLy8gdGhlIHR5
cGUgb2YgZWxlbWVudHMgaW4gYSBiYXNpY19qc29uIGNvbnRhaW5lcgotICAgIHVzaW5nIHZhbHVl
X3R5cGUgPSBiYXNpY19qc29uOwotCi0gICAgLy8vIHRoZSB0eXBlIG9mIGFuIGVsZW1lbnQgcmVm
ZXJlbmNlCi0gICAgdXNpbmcgcmVmZXJlbmNlID0gdmFsdWVfdHlwZSY7Ci0gICAgLy8vIHRoZSB0
eXBlIG9mIGFuIGVsZW1lbnQgY29uc3QgcmVmZXJlbmNlCi0gICAgdXNpbmcgY29uc3RfcmVmZXJl
bmNlID0gY29uc3QgdmFsdWVfdHlwZSY7Ci0KLSAgICAvLy8gYSB0eXBlIHRvIHJlcHJlc2VudCBk
aWZmZXJlbmNlcyBiZXR3ZWVuIGl0ZXJhdG9ycwotICAgIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9
IHN0ZDo6cHRyZGlmZl90OwotICAgIC8vLyBhIHR5cGUgdG8gcmVwcmVzZW50IGNvbnRhaW5lciBz
aXplcwotICAgIHVzaW5nIHNpemVfdHlwZSA9IHN0ZDo6c2l6ZV90OwotCi0gICAgLy8vIHRoZSBh
bGxvY2F0b3IgdHlwZQotICAgIHVzaW5nIGFsbG9jYXRvcl90eXBlID0gQWxsb2NhdG9yVHlwZTxi
YXNpY19qc29uPjsKLQotICAgIC8vLyB0aGUgdHlwZSBvZiBhbiBlbGVtZW50IHBvaW50ZXIKLSAg
ICB1c2luZyBwb2ludGVyID0gdHlwZW5hbWUgc3RkOjphbGxvY2F0b3JfdHJhaXRzPGFsbG9jYXRv
cl90eXBlPjo6cG9pbnRlcjsKLSAgICAvLy8gdGhlIHR5cGUgb2YgYW4gZWxlbWVudCBjb25zdCBw
b2ludGVyCi0gICAgdXNpbmcgY29uc3RfcG9pbnRlciA9IHR5cGVuYW1lIHN0ZDo6YWxsb2NhdG9y
X3RyYWl0czxhbGxvY2F0b3JfdHlwZT46OmNvbnN0X3BvaW50ZXI7Ci0KLSAgICAvLy8gYW4gaXRl
cmF0b3IgZm9yIGEgYmFzaWNfanNvbiBjb250YWluZXIKLSAgICB1c2luZyBpdGVyYXRvciA9IGl0
ZXJfaW1wbDxiYXNpY19qc29uPjsKLSAgICAvLy8gYSBjb25zdCBpdGVyYXRvciBmb3IgYSBiYXNp
Y19qc29uIGNvbnRhaW5lcgotICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gaXRlcl9pbXBsPGNv
bnN0IGJhc2ljX2pzb24+OwotICAgIC8vLyBhIHJldmVyc2UgaXRlcmF0b3IgZm9yIGEgYmFzaWNf
anNvbiBjb250YWluZXIKLSAgICB1c2luZyByZXZlcnNlX2l0ZXJhdG9yID0ganNvbl9yZXZlcnNl
X2l0ZXJhdG9yPHR5cGVuYW1lIGJhc2ljX2pzb246Oml0ZXJhdG9yPjsKLSAgICAvLy8gYSBjb25z
dCByZXZlcnNlIGl0ZXJhdG9yIGZvciBhIGJhc2ljX2pzb24gY29udGFpbmVyCi0gICAgdXNpbmcg
Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciA9IGpzb25fcmV2ZXJzZV9pdGVyYXRvcjx0eXBlbmFtZSBi
YXNpY19qc29uOjpjb25zdF9pdGVyYXRvcj47Ci0KLSAgICAvLy8gQH0KLQotCi0gICAgLyohCi0g
ICAgQGJyaWVmIHJldHVybnMgdGhlIGFsbG9jYXRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbnRh
aW5lcgotICAgICovCi0gICAgc3RhdGljIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7Ci0gICAgfQotCi0gICAgLyoh
Ci0gICAgQGJyaWVmIHJldHVybnMgdmVyc2lvbiBpbmZvcm1hdGlvbiBvbiB0aGUgbGlicmFyeQot
Ci0gICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgSlNPTiBvYmplY3Qgd2l0aCBpbmZvcm1hdGlv
biBhYm91dCB0aGUgbGlicmFyeSwKLSAgICBpbmNsdWRpbmcgdGhlIHZlcnNpb24gbnVtYmVyIGFu
ZCBpbmZvcm1hdGlvbiBvbiB0aGUgcGxhdGZvcm0gYW5kIGNvbXBpbGVyLgotCi0gICAgQHJldHVy
biBKU09OIG9iamVjdCBob2xkaW5nIHZlcnNpb24gaW5mb3JtYXRpb24KLSAgICBrZXkgICAgICAg
ICB8IGRlc2NyaXB0aW9uCi0gICAgLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0KLSAgICBg
Y29tcGlsZXJgICB8IEluZm9ybWF0aW9uIG9uIHRoZSB1c2VkIGNvbXBpbGVyLiBJdCBpcyBhbiBv
YmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6IGBjKytgICh0aGUgdXNlZCBDKysgc3RhbmRh
cmQpLCBgZmFtaWx5YCAodGhlIGNvbXBpbGVyIGZhbWlseTsgcG9zc2libGUgdmFsdWVzIGFyZSBg
Y2xhbmdgLCBgaWNjYCwgYGdjY2AsIGBpbGVjcHBgLCBgbXN2Y2AsIGBwZ2NwcGAsIGBzdW5wcm9g
LCBhbmQgYHVua25vd25gKSwgYW5kIGB2ZXJzaW9uYCAodGhlIGNvbXBpbGVyIHZlcnNpb24pLgot
ICAgIGBjb3B5cmlnaHRgIHwgVGhlIGNvcHlyaWdodCBsaW5lIGZvciB0aGUgbGlicmFyeSBhcyBz
dHJpbmcuCi0gICAgYG5hbWVgICAgICAgfCBUaGUgbmFtZSBvZiB0aGUgbGlicmFyeSBhcyBzdHJp
bmcuCi0gICAgYHBsYXRmb3JtYCAgfCBUaGUgdXNlZCBwbGF0Zm9ybSBhcyBzdHJpbmcuIFBvc3Np
YmxlIHZhbHVlcyBhcmUgYHdpbjMyYCwgYGxpbnV4YCwgYGFwcGxlYCwgYHVuaXhgLCBhbmQgYHVu
a25vd25gLgotICAgIGB1cmxgICAgICAgIHwgVGhlIFVSTCBvZiB0aGUgcHJvamVjdCBhcyBzdHJp
bmcuCi0gICAgYHZlcnNpb25gICAgfCBUaGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4gSXQgaXMg
YW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyBrZXlzOiBgbWFqb3JgLCBgbWlub3JgLCBhbmQg
YHBhdGNoYCBhcyBkZWZpbmVkIGJ5IFtTZW1hbnRpYyBWZXJzaW9uaW5nXShodHRwOi8vc2VtdmVy
Lm9yZyksIGFuZCBgc3RyaW5nYCAodGhlIHZlcnNpb24gc3RyaW5nKS4KLQotICAgIEBsaXZlZXhh
bXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBvdXRwdXQgb2YgdGhlIGBt
ZXRhKClgCi0gICAgZnVuY3Rpb24uLG1ldGF9Ci0KLSAgICBAY29tcGxleGl0eSBDb25zdGFudC4K
LQotICAgIEBzaW5jZSAyLjEuMAotICAgICovCi0gICAgc3RhdGljIGJhc2ljX2pzb24gbWV0YSgp
Ci0gICAgewotICAgICAgICBiYXNpY19qc29uIHJlc3VsdDsKLQotICAgICAgICByZXN1bHRbImNv
cHlyaWdodCJdID0gIihDKSAyMDEzLTIwMTcgTmllbHMgTG9obWFubiI7Ci0gICAgICAgIHJlc3Vs
dFsibmFtZSJdID0gIkpTT04gZm9yIE1vZGVybiBDKysiOwotICAgICAgICByZXN1bHRbInVybCJd
ID0gImh0dHBzOi8vZ2l0aHViLmNvbS9ubG9obWFubi9qc29uIjsKLSAgICAgICAgcmVzdWx0WyJ2
ZXJzaW9uIl0gPQotICAgICAgICB7Ci0gICAgICAgICAgICB7InN0cmluZyIsICIyLjEuMSJ9LAot
ICAgICAgICAgICAgeyJtYWpvciIsIDJ9LAotICAgICAgICAgICAgeyJtaW5vciIsIDF9LAotICAg
ICAgICAgICAgeyJwYXRjaCIsIDF9Ci0gICAgICAgIH07Ci0KLSNpZmRlZiBfV0lOMzIKLSAgICAg
ICAgcmVzdWx0WyJwbGF0Zm9ybSJdID0gIndpbjMyIjsKLSNlbGlmIGRlZmluZWQgX19saW51eF9f
Ci0gICAgICAgIHJlc3VsdFsicGxhdGZvcm0iXSA9ICJsaW51eCI7Ci0jZWxpZiBkZWZpbmVkIF9f
QVBQTEVfXwotICAgICAgICByZXN1bHRbInBsYXRmb3JtIl0gPSAiYXBwbGUiOwotI2VsaWYgZGVm
aW5lZCBfX3VuaXhfXwotICAgICAgICByZXN1bHRbInBsYXRmb3JtIl0gPSAidW5peCI7Ci0jZWxz
ZQotICAgICAgICByZXN1bHRbInBsYXRmb3JtIl0gPSAidW5rbm93biI7Ci0jZW5kaWYKLQotI2lm
IGRlZmluZWQoX19jbGFuZ19fKQotICAgICAgICByZXN1bHRbImNvbXBpbGVyIl0gPSB7eyJmYW1p
bHkiLCAiY2xhbmcifSwgeyJ2ZXJzaW9uIiwgX19jbGFuZ192ZXJzaW9uX199fTsKLSNlbGlmIGRl
ZmluZWQoX19JQ0MpIHx8IGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKLSAgICAgICAgcmVzdWx0
WyJjb21waWxlciJdID0ge3siZmFtaWx5IiwgImljYyJ9LCB7InZlcnNpb24iLCBfX0lOVEVMX0NP
TVBJTEVSfX07Ci0jZWxpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCBkZWZpbmVkKF9fR05VR19fKQot
ICAgICAgICByZXN1bHRbImNvbXBpbGVyIl0gPSB7eyJmYW1pbHkiLCAiZ2NjIn0sIHsidmVyc2lv
biIsIHN0ZDo6dG9fc3RyaW5nKF9fR05VQ19fKSArICIuIiArIHN0ZDo6dG9fc3RyaW5nKF9fR05V
Q19NSU5PUl9fKSArICIuIiArIHN0ZDo6dG9fc3RyaW5nKF9fR05VQ19QQVRDSExFVkVMX18pfX07
Ci0jZWxpZiBkZWZpbmVkKF9fSFBfY2MpIHx8IGRlZmluZWQoX19IUF9hQ0MpCi0gICAgICAgIHJl
c3VsdFsiY29tcGlsZXIiXSA9ICJocCIKLSNlbGlmIGRlZmluZWQoX19JQk1DUFBfXykKLSAgICAg
ICAgcmVzdWx0WyJjb21waWxlciJdID0ge3siZmFtaWx5IiwgImlsZWNwcCJ9LCB7InZlcnNpb24i
LCBfX0lCTUNQUF9ffX07Ci0jZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotICAgICAgICByZXN1bHRb
ImNvbXBpbGVyIl0gPSB7eyJmYW1pbHkiLCAibXN2YyJ9LCB7InZlcnNpb24iLCBfTVNDX1ZFUn19
OwotI2VsaWYgZGVmaW5lZChfX1BHSSkKLSAgICAgICAgcmVzdWx0WyJjb21waWxlciJdID0ge3si
ZmFtaWx5IiwgInBnY3BwIn0sIHsidmVyc2lvbiIsIF9fUEdJfX07Ci0jZWxpZiBkZWZpbmVkKF9f
U1VOUFJPX0NDKQotICAgICAgICByZXN1bHRbImNvbXBpbGVyIl0gPSB7eyJmYW1pbHkiLCAic3Vu
cHJvIn0sIHsidmVyc2lvbiIsIF9fU1VOUFJPX0NDfX07Ci0jZWxzZQotICAgICAgICByZXN1bHRb
ImNvbXBpbGVyIl0gPSB7eyJmYW1pbHkiLCAidW5rbm93biJ9LCB7InZlcnNpb24iLCAidW5rbm93
biJ9fTsKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLSAgICAgICAgcmVzdWx0WyJjb21w
aWxlciJdWyJjKysiXSA9IHN0ZDo6dG9fc3RyaW5nKF9fY3BsdXNwbHVzKTsKLSNlbHNlCi0gICAg
ICAgIHJlc3VsdFsiY29tcGlsZXIiXVsiYysrIl0gPSAidW5rbm93biI7Ci0jZW5kaWYKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotICAgIC8vIEpTT04gdmFsdWUgZGF0YSB0eXBlcyAvLwotICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotCi0gICAgLy8vIEBuYW1lIEpTT04gdmFsdWUgZGF0YSB0eXBlcwotICAg
IC8vLyBUaGUgZGF0YSB0eXBlcyB0byBzdG9yZSBhIEpTT04gdmFsdWUuIFRoZXNlIHR5cGVzIGFy
ZSBkZXJpdmVkIGZyb20KLSAgICAvLy8gdGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBwYXNzZWQgdG8g
Y2xhc3MgQHJlZiBiYXNpY19qc29uLgotICAgIC8vLyBAewotCi0gICAgLyohCi0gICAgQGJyaWVm
IGEgdHlwZSBmb3IgYW4gb2JqZWN0Ci0KLSAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5l
dC9yZmM3MTU5KSBkZXNjcmliZXMgSlNPTiBvYmplY3RzIGFzIGZvbGxvd3M6Ci0gICAgPiBBbiBv
YmplY3QgaXMgYW4gdW5vcmRlcmVkIGNvbGxlY3Rpb24gb2YgemVybyBvciBtb3JlIG5hbWUvdmFs
dWUgcGFpcnMsCi0gICAgPiB3aGVyZSBhIG5hbWUgaXMgYSBzdHJpbmcgYW5kIGEgdmFsdWUgaXMg
YSBzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgbnVsbCwKLSAgICA+IG9iamVjdCwgb3IgYXJyYXku
Ci0KLSAgICBUbyBzdG9yZSBvYmplY3RzIGluIEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkgdGhl
IHRlbXBsYXRlIHBhcmFtZXRlcnMKLSAgICBkZXNjcmliZWQgYmVsb3cuCi0KLSAgICBAdHBhcmFt
IE9iamVjdFR5cGUgIHRoZSBjb250YWluZXIgdG8gc3RvcmUgb2JqZWN0cyAoZS5nLiwgYHN0ZDo6
bWFwYCBvcgotICAgIGBzdGQ6OnVub3JkZXJlZF9tYXBgKQotICAgIEB0cGFyYW0gU3RyaW5nVHlw
ZSB0aGUgdHlwZSBvZiB0aGUga2V5cyBvciBuYW1lcyAoZS5nLiwgYHN0ZDo6c3RyaW5nYCkuCi0g
ICAgVGhlIGNvbXBhcmlzb24gZnVuY3Rpb24gYHN0ZDo6bGVzczxTdHJpbmdUeXBlPmAgaXMgdXNl
ZCB0byBvcmRlciBlbGVtZW50cwotICAgIGluc2lkZSB0aGUgY29udGFpbmVyLgotICAgIEB0cGFy
YW0gQWxsb2NhdG9yVHlwZSB0aGUgYWxsb2NhdG9yIHRvIHVzZSBmb3Igb2JqZWN0cyAoZS5nLiwK
LSAgICBgc3RkOjphbGxvY2F0b3JgKQotCi0gICAgIyMjIyBEZWZhdWx0IHR5cGUKLQotICAgIFdp
dGggdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBAYSBPYmplY3RUeXBlIChgc3RkOjptYXBgKSwgQGEg
U3RyaW5nVHlwZQotICAgIChgc3RkOjpzdHJpbmdgKSwgYW5kIEBhIEFsbG9jYXRvclR5cGUgKGBz
dGQ6OmFsbG9jYXRvcmApLCB0aGUgZGVmYXVsdAotICAgIHZhbHVlIGZvciBAYSBvYmplY3RfdCBp
czoKLQotICAgIEBjb2RlIHsuY3BwfQotICAgIHN0ZDo6bWFwPAotICAgICAgc3RkOjpzdHJpbmcs
IC8vIGtleV90eXBlCi0gICAgICBiYXNpY19qc29uLCAvLyB2YWx1ZV90eXBlCi0gICAgICBzdGQ6
Omxlc3M8c3RkOjpzdHJpbmc+LCAvLyBrZXlfY29tcGFyZQotICAgICAgc3RkOjphbGxvY2F0b3I8
c3RkOjpwYWlyPGNvbnN0IHN0ZDo6c3RyaW5nLCBiYXNpY19qc29uPj4gLy8gYWxsb2NhdG9yX3R5
cGUKLSAgICA+Ci0gICAgQGVuZGNvZGUKLQotICAgICMjIyMgQmVoYXZpb3IKLQotICAgIFRoZSBj
aG9pY2Ugb2YgQGEgb2JqZWN0X3QgaW5mbHVlbmNlcyB0aGUgYmVoYXZpb3Igb2YgdGhlIEpTT04g
Y2xhc3MuIFdpdGgKLSAgICB0aGUgZGVmYXVsdCB0eXBlLCBvYmplY3RzIGhhdmUgdGhlIGZvbGxv
d2luZyBiZWhhdmlvcjoKLQotICAgIC0gV2hlbiBhbGwgbmFtZXMgYXJlIHVuaXF1ZSwgb2JqZWN0
cyB3aWxsIGJlIGludGVyb3BlcmFibGUgaW4gdGhlIHNlbnNlCi0gICAgICB0aGF0IGFsbCBzb2Z0
d2FyZSBpbXBsZW1lbnRhdGlvbnMgcmVjZWl2aW5nIHRoYXQgb2JqZWN0IHdpbGwgYWdyZWUgb24K
LSAgICAgIHRoZSBuYW1lLXZhbHVlIG1hcHBpbmdzLgotICAgIC0gV2hlbiB0aGUgbmFtZXMgd2l0
aGluIGFuIG9iamVjdCBhcmUgbm90IHVuaXF1ZSwgbGF0ZXIgc3RvcmVkIG5hbWUvdmFsdWUKLSAg
ICAgIHBhaXJzIG92ZXJ3cml0ZSBwcmV2aW91c2x5IHN0b3JlZCBuYW1lL3ZhbHVlIHBhaXJzLCBs
ZWF2aW5nIHRoZSB1c2VkCi0gICAgICBuYW1lcyB1bmlxdWUuIEZvciBpbnN0YW5jZSwgYHsia2V5
IjogMX1gIGFuZCBgeyJrZXkiOiAyLCAia2V5IjogMX1gIHdpbGwKLSAgICAgIGJlIHRyZWF0ZWQg
YXMgZXF1YWwgYW5kIGJvdGggc3RvcmVkIGFzIGB7ImtleSI6IDF9YC4KLSAgICAtIEludGVybmFs
bHksIG5hbWUvdmFsdWUgcGFpcnMgYXJlIHN0b3JlZCBpbiBsZXhpY29ncmFwaGljYWwgb3JkZXIg
b2YgdGhlCi0gICAgICBuYW1lcy4gT2JqZWN0cyB3aWxsIGFsc28gYmUgc2VyaWFsaXplZCAoc2Vl
IEByZWYgZHVtcCkgaW4gdGhpcyBvcmRlci4KLSAgICAgIEZvciBpbnN0YW5jZSwgYHsiYiI6IDEs
ICJhIjogMn1gIGFuZCBgeyJhIjogMiwgImIiOiAxfWAgd2lsbCBiZSBzdG9yZWQKLSAgICAgIGFu
ZCBzZXJpYWxpemVkIGFzIGB7ImEiOiAyLCAiYiI6IDF9YC4KLSAgICAtIFdoZW4gY29tcGFyaW5n
IG9iamVjdHMsIHRoZSBvcmRlciBvZiB0aGUgbmFtZS92YWx1ZSBwYWlycyBpcyBpcnJlbGV2YW50
LgotICAgICAgVGhpcyBtYWtlcyBvYmplY3RzIGludGVyb3BlcmFibGUgaW4gdGhlIHNlbnNlIHRo
YXQgdGhleSB3aWxsIG5vdCBiZQotICAgICAgYWZmZWN0ZWQgYnkgdGhlc2UgZGlmZmVyZW5jZXMu
IEZvciBpbnN0YW5jZSwgYHsiYiI6IDEsICJhIjogMn1gIGFuZAotICAgICAgYHsiYSI6IDIsICJi
IjogMX1gIHdpbGwgYmUgdHJlYXRlZCBhcyBlcXVhbC4KLQotICAgICMjIyMgTGltaXRzCi0KLSAg
ICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9yZmM3MTU5KSBzcGVjaWZpZXM6Ci0gICAg
PiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgc2V0IGxpbWl0cyBvbiB0aGUgbWF4aW11bSBkZXB0aCBv
ZiBuZXN0aW5nLgotCi0gICAgSW4gdGhpcyBjbGFzcywgdGhlIG9iamVjdCdzIGxpbWl0IG9mIG5l
c3RpbmcgaXMgbm90IGNvbnN0cmFpbnQgZXhwbGljaXRseS4KLSAgICBIb3dldmVyLCBhIG1heGlt
dW0gZGVwdGggb2YgbmVzdGluZyBtYXkgYmUgaW50cm9kdWNlZCBieSB0aGUgY29tcGlsZXIgb3IK
LSAgICBydW50aW1lIGVudmlyb25tZW50LiBBIHRoZW9yZXRpY2FsIGxpbWl0IGNhbiBiZSBxdWVy
aWVkIGJ5IGNhbGxpbmcgdGhlCi0gICAgQHJlZiBtYXhfc2l6ZSBmdW5jdGlvbiBvZiBhIEpTT04g
b2JqZWN0LgotCi0gICAgIyMjIyBTdG9yYWdlCi0KLSAgICBPYmplY3RzIGFyZSBzdG9yZWQgYXMg
cG9pbnRlcnMgaW4gYSBAcmVmIGJhc2ljX2pzb24gdHlwZS4gVGhhdCBpcywgZm9yIGFueQotICAg
IGFjY2VzcyB0byBvYmplY3QgdmFsdWVzLCBhIHBvaW50ZXIgb2YgdHlwZSBgb2JqZWN0X3QqYCBt
dXN0IGJlCi0gICAgZGVyZWZlcmVuY2VkLgotCi0gICAgQHNhIEByZWYgYXJyYXlfdCAtLSB0eXBl
IGZvciBhbiBhcnJheSB2YWx1ZQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLQotICAgIEBu
b3RlIFRoZSBvcmRlciBuYW1lL3ZhbHVlIHBhaXJzIGFyZSBhZGRlZCB0byB0aGUgb2JqZWN0IGlz
ICpub3QqCi0gICAgcHJlc2VydmVkIGJ5IHRoZSBsaWJyYXJ5LiBUaGVyZWZvcmUsIGl0ZXJhdGlu
ZyBhbiBvYmplY3QgbWF5IHJldHVybgotICAgIG5hbWUvdmFsdWUgcGFpcnMgaW4gYSBkaWZmZXJl
bnQgb3JkZXIgdGhhbiB0aGV5IHdlcmUgb3JpZ2luYWxseSBzdG9yZWQuIEluCi0gICAgZmFjdCwg
a2V5cyB3aWxsIGJlIHRyYXZlcnNlZCBpbiBhbHBoYWJldGljYWwgb3JkZXIgYXMgYHN0ZDo6bWFw
YCB3aXRoCi0gICAgYHN0ZDo6bGVzc2AgaXMgdXNlZCBieSBkZWZhdWx0LiBQbGVhc2Ugbm90ZSB0
aGlzIGJlaGF2aW9yIGNvbmZvcm1zIHRvIFtSRkMKLSAgICA3MTU5XShodHRwOi8vcmZjNzE1OS5u
ZXQvcmZjNzE1OSksIGJlY2F1c2UgYW55IG9yZGVyIGltcGxlbWVudHMgdGhlCi0gICAgc3BlY2lm
aWVkICJ1bm9yZGVyZWQiIG5hdHVyZSBvZiBKU09OIG9iamVjdHMuCi0gICAgKi8KLSAgICB1c2lu
ZyBvYmplY3RfdCA9IE9iamVjdFR5cGU8U3RyaW5nVHlwZSwKLSAgICAgICAgICBiYXNpY19qc29u
LAotICAgICAgICAgIHN0ZDo6bGVzczxTdHJpbmdUeXBlPiwKLSAgICAgICAgICBBbGxvY2F0b3JU
eXBlPHN0ZDo6cGFpcjxjb25zdCBTdHJpbmdUeXBlLAotICAgICAgICAgIGJhc2ljX2pzb24+Pj47
Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgYSB0eXBlIGZvciBhbiBhcnJheQotCi0gICAgW1JGQyA3
MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1OSkgZGVzY3JpYmVzIEpTT04gYXJyYXlzIGFz
IGZvbGxvd3M6Ci0gICAgPiBBbiBhcnJheSBpcyBhbiBvcmRlcmVkIHNlcXVlbmNlIG9mIHplcm8g
b3IgbW9yZSB2YWx1ZXMuCi0KLSAgICBUbyBzdG9yZSBvYmplY3RzIGluIEMrKywgYSB0eXBlIGlz
IGRlZmluZWQgYnkgdGhlIHRlbXBsYXRlIHBhcmFtZXRlcnMKLSAgICBleHBsYWluZWQgYmVsb3cu
Ci0KLSAgICBAdHBhcmFtIEFycmF5VHlwZSAgY29udGFpbmVyIHR5cGUgdG8gc3RvcmUgYXJyYXlz
IChlLmcuLCBgc3RkOjp2ZWN0b3JgIG9yCi0gICAgYHN0ZDo6bGlzdGApCi0gICAgQHRwYXJhbSBB
bGxvY2F0b3JUeXBlIGFsbG9jYXRvciB0byB1c2UgZm9yIGFycmF5cyAoZS5nLiwgYHN0ZDo6YWxs
b2NhdG9yYCkKLQotICAgICMjIyMgRGVmYXVsdCB0eXBlCi0KLSAgICBXaXRoIHRoZSBkZWZhdWx0
IHZhbHVlcyBmb3IgQGEgQXJyYXlUeXBlIChgc3RkOjp2ZWN0b3JgKSBhbmQgQGEKLSAgICBBbGxv
Y2F0b3JUeXBlIChgc3RkOjphbGxvY2F0b3JgKSwgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIEBhIGFy
cmF5X3QgaXM6Ci0KLSAgICBAY29kZSB7LmNwcH0KLSAgICBzdGQ6OnZlY3RvcjwKLSAgICAgIGJh
c2ljX2pzb24sIC8vIHZhbHVlX3R5cGUKLSAgICAgIHN0ZDo6YWxsb2NhdG9yPGJhc2ljX2pzb24+
IC8vIGFsbG9jYXRvcl90eXBlCi0gICAgPgotICAgIEBlbmRjb2RlCi0KLSAgICAjIyMjIExpbWl0
cwotCi0gICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1OSkgc3BlY2lmaWVz
OgotICAgID4gQW4gaW1wbGVtZW50YXRpb24gbWF5IHNldCBsaW1pdHMgb24gdGhlIG1heGltdW0g
ZGVwdGggb2YgbmVzdGluZy4KLQotICAgIEluIHRoaXMgY2xhc3MsIHRoZSBhcnJheSdzIGxpbWl0
IG9mIG5lc3RpbmcgaXMgbm90IGNvbnN0cmFpbnQgZXhwbGljaXRseS4KLSAgICBIb3dldmVyLCBh
IG1heGltdW0gZGVwdGggb2YgbmVzdGluZyBtYXkgYmUgaW50cm9kdWNlZCBieSB0aGUgY29tcGls
ZXIgb3IKLSAgICBydW50aW1lIGVudmlyb25tZW50LiBBIHRoZW9yZXRpY2FsIGxpbWl0IGNhbiBi
ZSBxdWVyaWVkIGJ5IGNhbGxpbmcgdGhlCi0gICAgQHJlZiBtYXhfc2l6ZSBmdW5jdGlvbiBvZiBh
IEpTT04gYXJyYXkuCi0KLSAgICAjIyMjIFN0b3JhZ2UKLQotICAgIEFycmF5cyBhcmUgc3RvcmVk
IGFzIHBvaW50ZXJzIGluIGEgQHJlZiBiYXNpY19qc29uIHR5cGUuIFRoYXQgaXMsIGZvciBhbnkK
LSAgICBhY2Nlc3MgdG8gYXJyYXkgdmFsdWVzLCBhIHBvaW50ZXIgb2YgdHlwZSBgYXJyYXlfdCpg
IG11c3QgYmUgZGVyZWZlcmVuY2VkLgotCi0gICAgQHNhIEByZWYgb2JqZWN0X3QgLS0gdHlwZSBm
b3IgYW4gb2JqZWN0IHZhbHVlCi0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0g
ICAgdXNpbmcgYXJyYXlfdCA9IEFycmF5VHlwZTxiYXNpY19qc29uLCBBbGxvY2F0b3JUeXBlPGJh
c2ljX2pzb24+PjsKLQotICAgIC8qIQotICAgIEBicmllZiBhIHR5cGUgZm9yIGEgc3RyaW5nCi0K
LSAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9yZmM3MTU5KSBkZXNjcmliZXMgSlNP
TiBzdHJpbmdzIGFzIGZvbGxvd3M6Ci0gICAgPiBBIHN0cmluZyBpcyBhIHNlcXVlbmNlIG9mIHpl
cm8gb3IgbW9yZSBVbmljb2RlIGNoYXJhY3RlcnMuCi0KLSAgICBUbyBzdG9yZSBvYmplY3RzIGlu
IEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIHRlbXBsYXRlIHBhcmFtZXRlcgotICAgIGRl
c2NyaWJlZCBiZWxvdy4gVW5pY29kZSB2YWx1ZXMgYXJlIHNwbGl0IGJ5IHRoZSBKU09OIGNsYXNz
IGludG8KLSAgICBieXRlLXNpemVkIGNoYXJhY3RlcnMgZHVyaW5nIGRlc2VyaWFsaXphdGlvbi4K
LQotICAgIEB0cGFyYW0gU3RyaW5nVHlwZSAgdGhlIGNvbnRhaW5lciB0byBzdG9yZSBzdHJpbmdz
IChlLmcuLCBgc3RkOjpzdHJpbmdgKS4KLSAgICBOb3RlIHRoaXMgY29udGFpbmVyIGlzIHVzZWQg
Zm9yIGtleXMvbmFtZXMgaW4gb2JqZWN0cywgc2VlIEByZWYgb2JqZWN0X3QuCi0KLSAgICAjIyMj
IERlZmF1bHQgdHlwZQotCi0gICAgV2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIEBhIFN0cmlu
Z1R5cGUgKGBzdGQ6OnN0cmluZ2ApLCB0aGUgZGVmYXVsdAotICAgIHZhbHVlIGZvciBAYSBzdHJp
bmdfdCBpczoKLQotICAgIEBjb2RlIHsuY3BwfQotICAgIHN0ZDo6c3RyaW5nCi0gICAgQGVuZGNv
ZGUKLQotICAgICMjIyMgRW5jb2RpbmcKLQotICAgIFN0cmluZ3MgYXJlIHN0b3JlZCBpbiBVVEYt
OCBlbmNvZGluZy4gVGhlcmVmb3JlLCBmdW5jdGlvbnMgbGlrZQotICAgIGBzdGQ6OnN0cmluZzo6
c2l6ZSgpYCBvciBgc3RkOjpzdHJpbmc6Omxlbmd0aCgpYCByZXR1cm4gdGhlIG51bWJlciBvZgot
ICAgIGJ5dGVzIGluIHRoZSBzdHJpbmcgcmF0aGVyIHRoYW4gdGhlIG51bWJlciBvZiBjaGFyYWN0
ZXJzIG9yIGdseXBocy4KLQotICAgICMjIyMgU3RyaW5nIGNvbXBhcmlzb24KLQotICAgIFtSRkMg
NzE1OV0oaHR0cDovL3JmYzcxNTkubmV0L3JmYzcxNTkpIHN0YXRlczoKLSAgICA+IFNvZnR3YXJl
IGltcGxlbWVudGF0aW9ucyBhcmUgdHlwaWNhbGx5IHJlcXVpcmVkIHRvIHRlc3QgbmFtZXMgb2Yg
b2JqZWN0Ci0gICAgPiBtZW1iZXJzIGZvciBlcXVhbGl0eS4gSW1wbGVtZW50YXRpb25zIHRoYXQg
dHJhbnNmb3JtIHRoZSB0ZXh0dWFsCi0gICAgPiByZXByZXNlbnRhdGlvbiBpbnRvIHNlcXVlbmNl
cyBvZiBVbmljb2RlIGNvZGUgdW5pdHMgYW5kIHRoZW4gcGVyZm9ybSB0aGUKLSAgICA+IGNvbXBh
cmlzb24gbnVtZXJpY2FsbHksIGNvZGUgdW5pdCBieSBjb2RlIHVuaXQsIGFyZSBpbnRlcm9wZXJh
YmxlIGluIHRoZQotICAgID4gc2Vuc2UgdGhhdCBpbXBsZW1lbnRhdGlvbnMgd2lsbCBhZ3JlZSBp
biBhbGwgY2FzZXMgb24gZXF1YWxpdHkgb3IKLSAgICA+IGluZXF1YWxpdHkgb2YgdHdvIHN0cmlu
Z3MuIEZvciBleGFtcGxlLCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBjb21wYXJlCi0gICAgPiBzdHJp
bmdzIHdpdGggZXNjYXBlZCBjaGFyYWN0ZXJzIHVuY29udmVydGVkIG1heSBpbmNvcnJlY3RseSBm
aW5kIHRoYXQKLSAgICA+IGAiYVxcYiJgIGFuZCBgImFcdTAwNUNiImAgYXJlIG5vdCBlcXVhbC4K
LQotICAgIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgaW50ZXJvcGVyYWJsZSBhcyBpdCBkb2VzIGNv
bXBhcmUgc3RyaW5ncyBjb2RlIHVuaXQKLSAgICBieSBjb2RlIHVuaXQuCi0KLSAgICAjIyMjIFN0
b3JhZ2UKLQotICAgIFN0cmluZyB2YWx1ZXMgYXJlIHN0b3JlZCBhcyBwb2ludGVycyBpbiBhIEBy
ZWYgYmFzaWNfanNvbiB0eXBlLiBUaGF0IGlzLAotICAgIGZvciBhbnkgYWNjZXNzIHRvIHN0cmlu
ZyB2YWx1ZXMsIGEgcG9pbnRlciBvZiB0eXBlIGBzdHJpbmdfdCpgIG11c3QgYmUKLSAgICBkZXJl
ZmVyZW5jZWQuCi0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAgdXNpbmcg
c3RyaW5nX3QgPSBTdHJpbmdUeXBlOwotCi0gICAgLyohCi0gICAgQGJyaWVmIGEgdHlwZSBmb3Ig
YSBib29sZWFuCi0KLSAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9yZmM3MTU5KSBp
bXBsaWNpdGx5IGRlc2NyaWJlcyBhIGJvb2xlYW4gYXMgYQotICAgIHR5cGUgd2hpY2ggZGlmZmVy
ZW50aWF0ZXMgdGhlIHR3byBsaXRlcmFscyBgdHJ1ZWAgYW5kIGBmYWxzZWAuCi0KLSAgICBUbyBz
dG9yZSBvYmplY3RzIGluIEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIHRlbXBsYXRlIHBh
cmFtZXRlciBAYQotICAgIEJvb2xlYW5UeXBlIHdoaWNoIGNob29zZXMgdGhlIHR5cGUgdG8gdXNl
LgotCi0gICAgIyMjIyBEZWZhdWx0IHR5cGUKLQotICAgIFdpdGggdGhlIGRlZmF1bHQgdmFsdWVz
IGZvciBAYSBCb29sZWFuVHlwZSAoYGJvb2xgKSwgdGhlIGRlZmF1bHQgdmFsdWUgZm9yCi0gICAg
QGEgYm9vbGVhbl90IGlzOgotCi0gICAgQGNvZGUgey5jcHB9Ci0gICAgYm9vbAotICAgIEBlbmRj
b2RlCi0KLSAgICAjIyMjIFN0b3JhZ2UKLQotICAgIEJvb2xlYW4gdmFsdWVzIGFyZSBzdG9yZWQg
ZGlyZWN0bHkgaW5zaWRlIGEgQHJlZiBiYXNpY19qc29uIHR5cGUuCi0KLSAgICBAc2luY2UgdmVy
c2lvbiAxLjAuMAotICAgICovCi0gICAgdXNpbmcgYm9vbGVhbl90ID0gQm9vbGVhblR5cGU7Ci0K
LSAgICAvKiEKLSAgICBAYnJpZWYgYSB0eXBlIGZvciBhIG51bWJlciAoaW50ZWdlcikKLQotICAg
IFtSRkMgNzE1OV0oaHR0cDovL3JmYzcxNTkubmV0L3JmYzcxNTkpIGRlc2NyaWJlcyBudW1iZXJz
IGFzIGZvbGxvd3M6Ci0gICAgPiBUaGUgcmVwcmVzZW50YXRpb24gb2YgbnVtYmVycyBpcyBzaW1p
bGFyIHRvIHRoYXQgdXNlZCBpbiBtb3N0Ci0gICAgPiBwcm9ncmFtbWluZyBsYW5ndWFnZXMuIEEg
bnVtYmVyIGlzIHJlcHJlc2VudGVkIGluIGJhc2UgMTAgdXNpbmcgZGVjaW1hbAotICAgID4gZGln
aXRzLiBJdCBjb250YWlucyBhbiBpbnRlZ2VyIGNvbXBvbmVudCB0aGF0IG1heSBiZSBwcmVmaXhl
ZCB3aXRoIGFuCi0gICAgPiBvcHRpb25hbCBtaW51cyBzaWduLCB3aGljaCBtYXkgYmUgZm9sbG93
ZWQgYnkgYSBmcmFjdGlvbiBwYXJ0IGFuZC9vciBhbgotICAgID4gZXhwb25lbnQgcGFydC4gTGVh
ZGluZyB6ZXJvcyBhcmUgbm90IGFsbG93ZWQuICguLi4pIE51bWVyaWMgdmFsdWVzIHRoYXQKLSAg
ICA+IGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiB0aGUgZ3JhbW1hciBiZWxvdyAoc3VjaCBhcyBJ
bmZpbml0eSBhbmQgTmFOKQotICAgID4gYXJlIG5vdCBwZXJtaXR0ZWQuCi0KLSAgICBUaGlzIGRl
c2NyaXB0aW9uIGluY2x1ZGVzIGJvdGggaW50ZWdlciBhbmQgZmxvYXRpbmctcG9pbnQgbnVtYmVy
cy4KLSAgICBIb3dldmVyLCBDKysgYWxsb3dzIG1vcmUgcHJlY2lzZSBzdG9yYWdlIGlmIGl0IGlz
IGtub3duIHdoZXRoZXIgdGhlIG51bWJlcgotICAgIGlzIGEgc2lnbmVkIGludGVnZXIsIGFuIHVu
c2lnbmVkIGludGVnZXIgb3IgYSBmbG9hdGluZy1wb2ludCBudW1iZXIuCi0gICAgVGhlcmVmb3Jl
LCB0aHJlZSBkaWZmZXJlbnQgdHlwZXMsIEByZWYgbnVtYmVyX2ludGVnZXJfdCwgQHJlZgotICAg
IG51bWJlcl91bnNpZ25lZF90IGFuZCBAcmVmIG51bWJlcl9mbG9hdF90IGFyZSB1c2VkLgotCi0g
ICAgVG8gc3RvcmUgaW50ZWdlciBudW1iZXJzIGluIEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkg
dGhlIHRlbXBsYXRlCi0gICAgcGFyYW1ldGVyIEBhIE51bWJlckludGVnZXJUeXBlIHdoaWNoIGNo
b29zZXMgdGhlIHR5cGUgdG8gdXNlLgotCi0gICAgIyMjIyBEZWZhdWx0IHR5cGUKLQotICAgIFdp
dGggdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBAYSBOdW1iZXJJbnRlZ2VyVHlwZSAoYGludDY0X3Rg
KSwgdGhlIGRlZmF1bHQKLSAgICB2YWx1ZSBmb3IgQGEgbnVtYmVyX2ludGVnZXJfdCBpczoKLQot
ICAgIEBjb2RlIHsuY3BwfQotICAgIGludDY0X3QKLSAgICBAZW5kY29kZQotCi0gICAgIyMjIyBE
ZWZhdWx0IGJlaGF2aW9yCi0KLSAgICAtIFRoZSByZXN0cmljdGlvbnMgYWJvdXQgbGVhZGluZyB6
ZXJvcyBpcyBub3QgZW5mb3JjZWQgaW4gQysrLiBJbnN0ZWFkLAotICAgICAgbGVhZGluZyB6ZXJv
cyBpbiBpbnRlZ2VyIGxpdGVyYWxzIGxlYWQgdG8gYW4gaW50ZXJwcmV0YXRpb24gYXMgb2N0YWwK
LSAgICAgIG51bWJlci4gSW50ZXJuYWxseSwgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGFzIGRl
Y2ltYWwgbnVtYmVyLiBGb3IKLSAgICAgIGluc3RhbmNlLCB0aGUgQysrIGludGVnZXIgbGl0ZXJh
bCBgMDEwYCB3aWxsIGJlIHNlcmlhbGl6ZWQgdG8gYDhgLgotICAgICAgRHVyaW5nIGRlc2VyaWFs
aXphdGlvbiwgbGVhZGluZyB6ZXJvcyB5aWVsZCBhbiBlcnJvci4KLSAgICAtIE5vdC1hLW51bWJl
ciAoTmFOKSB2YWx1ZXMgd2lsbCBiZSBzZXJpYWxpemVkIHRvIGBudWxsYC4KLQotICAgICMjIyMg
TGltaXRzCi0KLSAgICBbUkZDIDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9yZmM3MTU5KSBzcGVj
aWZpZXM6Ci0gICAgPiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgc2V0IGxpbWl0cyBvbiB0aGUgcmFu
Z2UgYW5kIHByZWNpc2lvbiBvZiBudW1iZXJzLgotCi0gICAgV2hlbiB0aGUgZGVmYXVsdCB0eXBl
IGlzIHVzZWQsIHRoZSBtYXhpbWFsIGludGVnZXIgbnVtYmVyIHRoYXQgY2FuIGJlCi0gICAgc3Rv
cmVkIGlzIGA5MjIzMzcyMDM2ODU0Nzc1ODA3YCAoSU5UNjRfTUFYKSBhbmQgdGhlIG1pbmltYWwg
aW50ZWdlciBudW1iZXIKLSAgICB0aGF0IGNhbiBiZSBzdG9yZWQgaXMgYC05MjIzMzcyMDM2ODU0
Nzc1ODA4YCAoSU5UNjRfTUlOKS4gSW50ZWdlciBudW1iZXJzCi0gICAgdGhhdCBhcmUgb3V0IG9m
IHJhbmdlIHdpbGwgeWllbGQgb3Zlci91bmRlcmZsb3cgd2hlbiB1c2VkIGluIGEKLSAgICBjb25z
dHJ1Y3Rvci4gRHVyaW5nIGRlc2VyaWFsaXphdGlvbiwgdG9vIGxhcmdlIG9yIHNtYWxsIGludGVn
ZXIgbnVtYmVycwotICAgIHdpbGwgYmUgYXV0b21hdGljYWxseSBiZSBzdG9yZWQgYXMgQHJlZiBu
dW1iZXJfdW5zaWduZWRfdCBvciBAcmVmCi0gICAgbnVtYmVyX2Zsb2F0X3QuCi0KLSAgICBbUkZD
IDcxNTldKGh0dHA6Ly9yZmM3MTU5Lm5ldC9yZmM3MTU5KSBmdXJ0aGVyIHN0YXRlczoKLSAgICA+
IE5vdGUgdGhhdCB3aGVuIHN1Y2ggc29mdHdhcmUgaXMgdXNlZCwgbnVtYmVycyB0aGF0IGFyZSBp
bnRlZ2VycyBhbmQgYXJlCi0gICAgPiBpbiB0aGUgcmFuZ2UgXGYkWy0yXns1M30rMSwgMl57NTN9
LTFdXGYkIGFyZSBpbnRlcm9wZXJhYmxlIGluIHRoZSBzZW5zZQotICAgID4gdGhhdCBpbXBsZW1l
bnRhdGlvbnMgd2lsbCBhZ3JlZSBleGFjdGx5IG9uIHRoZWlyIG51bWVyaWMgdmFsdWVzLgotCi0g
ICAgQXMgdGhpcyByYW5nZSBpcyBhIHN1YnJhbmdlIG9mIHRoZSBleGFjdGx5IHN1cHBvcnRlZCBy
YW5nZSBbSU5UNjRfTUlOLAotICAgIElOVDY0X01BWF0sIHRoaXMgY2xhc3MncyBpbnRlZ2VyIHR5
cGUgaXMgaW50ZXJvcGVyYWJsZS4KLQotICAgICMjIyMgU3RvcmFnZQotCi0gICAgSW50ZWdlciBu
dW1iZXIgdmFsdWVzIGFyZSBzdG9yZWQgZGlyZWN0bHkgaW5zaWRlIGEgQHJlZiBiYXNpY19qc29u
IHR5cGUuCi0KLSAgICBAc2EgQHJlZiBudW1iZXJfZmxvYXRfdCAtLSB0eXBlIGZvciBudW1iZXIg
dmFsdWVzIChmbG9hdGluZy1wb2ludCkKLQotICAgIEBzYSBAcmVmIG51bWJlcl91bnNpZ25lZF90
IC0tIHR5cGUgZm9yIG51bWJlciB2YWx1ZXMgKHVuc2lnbmVkIGludGVnZXIpCi0KLSAgICBAc2lu
Y2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAgdXNpbmcgbnVtYmVyX2ludGVnZXJfdCA9IE51
bWJlckludGVnZXJUeXBlOwotCi0gICAgLyohCi0gICAgQGJyaWVmIGEgdHlwZSBmb3IgYSBudW1i
ZXIgKHVuc2lnbmVkKQotCi0gICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1
OSkgZGVzY3JpYmVzIG51bWJlcnMgYXMgZm9sbG93czoKLSAgICA+IFRoZSByZXByZXNlbnRhdGlv
biBvZiBudW1iZXJzIGlzIHNpbWlsYXIgdG8gdGhhdCB1c2VkIGluIG1vc3QKLSAgICA+IHByb2dy
YW1taW5nIGxhbmd1YWdlcy4gQSBudW1iZXIgaXMgcmVwcmVzZW50ZWQgaW4gYmFzZSAxMCB1c2lu
ZyBkZWNpbWFsCi0gICAgPiBkaWdpdHMuIEl0IGNvbnRhaW5zIGFuIGludGVnZXIgY29tcG9uZW50
IHRoYXQgbWF5IGJlIHByZWZpeGVkIHdpdGggYW4KLSAgICA+IG9wdGlvbmFsIG1pbnVzIHNpZ24s
IHdoaWNoIG1heSBiZSBmb2xsb3dlZCBieSBhIGZyYWN0aW9uIHBhcnQgYW5kL29yIGFuCi0gICAg
PiBleHBvbmVudCBwYXJ0LiBMZWFkaW5nIHplcm9zIGFyZSBub3QgYWxsb3dlZC4gKC4uLikgTnVt
ZXJpYyB2YWx1ZXMgdGhhdAotICAgID4gY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIHRoZSBncmFt
bWFyIGJlbG93IChzdWNoIGFzIEluZmluaXR5IGFuZCBOYU4pCi0gICAgPiBhcmUgbm90IHBlcm1p
dHRlZC4KLQotICAgIFRoaXMgZGVzY3JpcHRpb24gaW5jbHVkZXMgYm90aCBpbnRlZ2VyIGFuZCBm
bG9hdGluZy1wb2ludCBudW1iZXJzLgotICAgIEhvd2V2ZXIsIEMrKyBhbGxvd3MgbW9yZSBwcmVj
aXNlIHN0b3JhZ2UgaWYgaXQgaXMga25vd24gd2hldGhlciB0aGUgbnVtYmVyCi0gICAgaXMgYSBz
aWduZWQgaW50ZWdlciwgYW4gdW5zaWduZWQgaW50ZWdlciBvciBhIGZsb2F0aW5nLXBvaW50IG51
bWJlci4KLSAgICBUaGVyZWZvcmUsIHRocmVlIGRpZmZlcmVudCB0eXBlcywgQHJlZiBudW1iZXJf
aW50ZWdlcl90LCBAcmVmCi0gICAgbnVtYmVyX3Vuc2lnbmVkX3QgYW5kIEByZWYgbnVtYmVyX2Zs
b2F0X3QgYXJlIHVzZWQuCi0KLSAgICBUbyBzdG9yZSB1bnNpZ25lZCBpbnRlZ2VyIG51bWJlcnMg
aW4gQysrLCBhIHR5cGUgaXMgZGVmaW5lZCBieSB0aGUKLSAgICB0ZW1wbGF0ZSBwYXJhbWV0ZXIg
QGEgTnVtYmVyVW5zaWduZWRUeXBlIHdoaWNoIGNob29zZXMgdGhlIHR5cGUgdG8gdXNlLgotCi0g
ICAgIyMjIyBEZWZhdWx0IHR5cGUKLQotICAgIFdpdGggdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBA
YSBOdW1iZXJVbnNpZ25lZFR5cGUgKGB1aW50NjRfdGApLCB0aGUKLSAgICBkZWZhdWx0IHZhbHVl
IGZvciBAYSBudW1iZXJfdW5zaWduZWRfdCBpczoKLQotICAgIEBjb2RlIHsuY3BwfQotICAgIHVp
bnQ2NF90Ci0gICAgQGVuZGNvZGUKLQotICAgICMjIyMgRGVmYXVsdCBiZWhhdmlvcgotCi0gICAg
LSBUaGUgcmVzdHJpY3Rpb25zIGFib3V0IGxlYWRpbmcgemVyb3MgaXMgbm90IGVuZm9yY2VkIGlu
IEMrKy4gSW5zdGVhZCwKLSAgICAgIGxlYWRpbmcgemVyb3MgaW4gaW50ZWdlciBsaXRlcmFscyBs
ZWFkIHRvIGFuIGludGVycHJldGF0aW9uIGFzIG9jdGFsCi0gICAgICBudW1iZXIuIEludGVybmFs
bHksIHRoZSB2YWx1ZSB3aWxsIGJlIHN0b3JlZCBhcyBkZWNpbWFsIG51bWJlci4gRm9yCi0gICAg
ICBpbnN0YW5jZSwgdGhlIEMrKyBpbnRlZ2VyIGxpdGVyYWwgYDAxMGAgd2lsbCBiZSBzZXJpYWxp
emVkIHRvIGA4YC4KLSAgICAgIER1cmluZyBkZXNlcmlhbGl6YXRpb24sIGxlYWRpbmcgemVyb3Mg
eWllbGQgYW4gZXJyb3IuCi0gICAgLSBOb3QtYS1udW1iZXIgKE5hTikgdmFsdWVzIHdpbGwgYmUg
c2VyaWFsaXplZCB0byBgbnVsbGAuCi0KLSAgICAjIyMjIExpbWl0cwotCi0gICAgW1JGQyA3MTU5
XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1OSkgc3BlY2lmaWVzOgotICAgID4gQW4gaW1wbGVt
ZW50YXRpb24gbWF5IHNldCBsaW1pdHMgb24gdGhlIHJhbmdlIGFuZCBwcmVjaXNpb24gb2YgbnVt
YmVycy4KLQotICAgIFdoZW4gdGhlIGRlZmF1bHQgdHlwZSBpcyB1c2VkLCB0aGUgbWF4aW1hbCBp
bnRlZ2VyIG51bWJlciB0aGF0IGNhbiBiZQotICAgIHN0b3JlZCBpcyBgMTg0NDY3NDQwNzM3MDk1
NTE2MTVgIChVSU5UNjRfTUFYKSBhbmQgdGhlIG1pbmltYWwgaW50ZWdlcgotICAgIG51bWJlciB0
aGF0IGNhbiBiZSBzdG9yZWQgaXMgYDBgLiBJbnRlZ2VyIG51bWJlcnMgdGhhdCBhcmUgb3V0IG9m
IHJhbmdlCi0gICAgd2lsbCB5aWVsZCBvdmVyL3VuZGVyZmxvdyB3aGVuIHVzZWQgaW4gYSBjb25z
dHJ1Y3Rvci4gRHVyaW5nCi0gICAgZGVzZXJpYWxpemF0aW9uLCB0b28gbGFyZ2Ugb3Igc21hbGwg
aW50ZWdlciBudW1iZXJzIHdpbGwgYmUgYXV0b21hdGljYWxseQotICAgIGJlIHN0b3JlZCBhcyBA
cmVmIG51bWJlcl9pbnRlZ2VyX3Qgb3IgQHJlZiBudW1iZXJfZmxvYXRfdC4KLQotICAgIFtSRkMg
NzE1OV0oaHR0cDovL3JmYzcxNTkubmV0L3JmYzcxNTkpIGZ1cnRoZXIgc3RhdGVzOgotICAgID4g
Tm90ZSB0aGF0IHdoZW4gc3VjaCBzb2Z0d2FyZSBpcyB1c2VkLCBudW1iZXJzIHRoYXQgYXJlIGlu
dGVnZXJzIGFuZCBhcmUKLSAgICA+IGluIHRoZSByYW5nZSBcZiRbLTJeezUzfSsxLCAyXns1M30t
MV1cZiQgYXJlIGludGVyb3BlcmFibGUgaW4gdGhlIHNlbnNlCi0gICAgPiB0aGF0IGltcGxlbWVu
dGF0aW9ucyB3aWxsIGFncmVlIGV4YWN0bHkgb24gdGhlaXIgbnVtZXJpYyB2YWx1ZXMuCi0KLSAg
ICBBcyB0aGlzIHJhbmdlIGlzIGEgc3VicmFuZ2UgKHdoZW4gY29uc2lkZXJlZCBpbiBjb25qdW5j
dGlvbiB3aXRoIHRoZQotICAgIG51bWJlcl9pbnRlZ2VyX3QgdHlwZSkgb2YgdGhlIGV4YWN0bHkg
c3VwcG9ydGVkIHJhbmdlIFswLCBVSU5UNjRfTUFYXSwKLSAgICB0aGlzIGNsYXNzJ3MgaW50ZWdl
ciB0eXBlIGlzIGludGVyb3BlcmFibGUuCi0KLSAgICAjIyMjIFN0b3JhZ2UKLQotICAgIEludGVn
ZXIgbnVtYmVyIHZhbHVlcyBhcmUgc3RvcmVkIGRpcmVjdGx5IGluc2lkZSBhIEByZWYgYmFzaWNf
anNvbiB0eXBlLgotCi0gICAgQHNhIEByZWYgbnVtYmVyX2Zsb2F0X3QgLS0gdHlwZSBmb3IgbnVt
YmVyIHZhbHVlcyAoZmxvYXRpbmctcG9pbnQpCi0gICAgQHNhIEByZWYgbnVtYmVyX2ludGVnZXJf
dCAtLSB0eXBlIGZvciBudW1iZXIgdmFsdWVzIChpbnRlZ2VyKQotCi0gICAgQHNpbmNlIHZlcnNp
b24gMi4wLjAKLSAgICAqLwotICAgIHVzaW5nIG51bWJlcl91bnNpZ25lZF90ID0gTnVtYmVyVW5z
aWduZWRUeXBlOwotCi0gICAgLyohCi0gICAgQGJyaWVmIGEgdHlwZSBmb3IgYSBudW1iZXIgKGZs
b2F0aW5nLXBvaW50KQotCi0gICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZjNzE1
OSkgZGVzY3JpYmVzIG51bWJlcnMgYXMgZm9sbG93czoKLSAgICA+IFRoZSByZXByZXNlbnRhdGlv
biBvZiBudW1iZXJzIGlzIHNpbWlsYXIgdG8gdGhhdCB1c2VkIGluIG1vc3QKLSAgICA+IHByb2dy
YW1taW5nIGxhbmd1YWdlcy4gQSBudW1iZXIgaXMgcmVwcmVzZW50ZWQgaW4gYmFzZSAxMCB1c2lu
ZyBkZWNpbWFsCi0gICAgPiBkaWdpdHMuIEl0IGNvbnRhaW5zIGFuIGludGVnZXIgY29tcG9uZW50
IHRoYXQgbWF5IGJlIHByZWZpeGVkIHdpdGggYW4KLSAgICA+IG9wdGlvbmFsIG1pbnVzIHNpZ24s
IHdoaWNoIG1heSBiZSBmb2xsb3dlZCBieSBhIGZyYWN0aW9uIHBhcnQgYW5kL29yIGFuCi0gICAg
PiBleHBvbmVudCBwYXJ0LiBMZWFkaW5nIHplcm9zIGFyZSBub3QgYWxsb3dlZC4gKC4uLikgTnVt
ZXJpYyB2YWx1ZXMgdGhhdAotICAgID4gY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIHRoZSBncmFt
bWFyIGJlbG93IChzdWNoIGFzIEluZmluaXR5IGFuZCBOYU4pCi0gICAgPiBhcmUgbm90IHBlcm1p
dHRlZC4KLQotICAgIFRoaXMgZGVzY3JpcHRpb24gaW5jbHVkZXMgYm90aCBpbnRlZ2VyIGFuZCBm
bG9hdGluZy1wb2ludCBudW1iZXJzLgotICAgIEhvd2V2ZXIsIEMrKyBhbGxvd3MgbW9yZSBwcmVj
aXNlIHN0b3JhZ2UgaWYgaXQgaXMga25vd24gd2hldGhlciB0aGUgbnVtYmVyCi0gICAgaXMgYSBz
aWduZWQgaW50ZWdlciwgYW4gdW5zaWduZWQgaW50ZWdlciBvciBhIGZsb2F0aW5nLXBvaW50IG51
bWJlci4KLSAgICBUaGVyZWZvcmUsIHRocmVlIGRpZmZlcmVudCB0eXBlcywgQHJlZiBudW1iZXJf
aW50ZWdlcl90LCBAcmVmCi0gICAgbnVtYmVyX3Vuc2lnbmVkX3QgYW5kIEByZWYgbnVtYmVyX2Zs
b2F0X3QgYXJlIHVzZWQuCi0KLSAgICBUbyBzdG9yZSBmbG9hdGluZy1wb2ludCBudW1iZXJzIGlu
IEMrKywgYSB0eXBlIGlzIGRlZmluZWQgYnkgdGhlIHRlbXBsYXRlCi0gICAgcGFyYW1ldGVyIEBh
IE51bWJlckZsb2F0VHlwZSB3aGljaCBjaG9vc2VzIHRoZSB0eXBlIHRvIHVzZS4KLQotICAgICMj
IyMgRGVmYXVsdCB0eXBlCi0KLSAgICBXaXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgQGEgTnVt
YmVyRmxvYXRUeXBlIChgZG91YmxlYCksIHRoZSBkZWZhdWx0Ci0gICAgdmFsdWUgZm9yIEBhIG51
bWJlcl9mbG9hdF90IGlzOgotCi0gICAgQGNvZGUgey5jcHB9Ci0gICAgZG91YmxlCi0gICAgQGVu
ZGNvZGUKLQotICAgICMjIyMgRGVmYXVsdCBiZWhhdmlvcgotCi0gICAgLSBUaGUgcmVzdHJpY3Rp
b25zIGFib3V0IGxlYWRpbmcgemVyb3MgaXMgbm90IGVuZm9yY2VkIGluIEMrKy4gSW5zdGVhZCwK
LSAgICAgIGxlYWRpbmcgemVyb3MgaW4gZmxvYXRpbmctcG9pbnQgbGl0ZXJhbHMgd2lsbCBiZSBp
Z25vcmVkLiBJbnRlcm5hbGx5LAotICAgICAgdGhlIHZhbHVlIHdpbGwgYmUgc3RvcmVkIGFzIGRl
Y2ltYWwgbnVtYmVyLiBGb3IgaW5zdGFuY2UsIHRoZSBDKysKLSAgICAgIGZsb2F0aW5nLXBvaW50
IGxpdGVyYWwgYDAxLjJgIHdpbGwgYmUgc2VyaWFsaXplZCB0byBgMS4yYC4gRHVyaW5nCi0gICAg
ICBkZXNlcmlhbGl6YXRpb24sIGxlYWRpbmcgemVyb3MgeWllbGQgYW4gZXJyb3IuCi0gICAgLSBO
b3QtYS1udW1iZXIgKE5hTikgdmFsdWVzIHdpbGwgYmUgc2VyaWFsaXplZCB0byBgbnVsbGAuCi0K
LSAgICAjIyMjIExpbWl0cwotCi0gICAgW1JGQyA3MTU5XShodHRwOi8vcmZjNzE1OS5uZXQvcmZj
NzE1OSkgc3RhdGVzOgotICAgID4gVGhpcyBzcGVjaWZpY2F0aW9uIGFsbG93cyBpbXBsZW1lbnRh
dGlvbnMgdG8gc2V0IGxpbWl0cyBvbiB0aGUgcmFuZ2UgYW5kCi0gICAgPiBwcmVjaXNpb24gb2Yg
bnVtYmVycyBhY2NlcHRlZC4gU2luY2Ugc29mdHdhcmUgdGhhdCBpbXBsZW1lbnRzIElFRUUKLSAg
ICA+IDc1NC0yMDA4IGJpbmFyeTY0IChkb3VibGUgcHJlY2lzaW9uKSBudW1iZXJzIGlzIGdlbmVy
YWxseSBhdmFpbGFibGUgYW5kCi0gICAgPiB3aWRlbHkgdXNlZCwgZ29vZCBpbnRlcm9wZXJhYmls
aXR5IGNhbiBiZSBhY2hpZXZlZCBieSBpbXBsZW1lbnRhdGlvbnMKLSAgICA+IHRoYXQgZXhwZWN0
IG5vIG1vcmUgcHJlY2lzaW9uIG9yIHJhbmdlIHRoYW4gdGhlc2UgcHJvdmlkZSwgaW4gdGhlIHNl
bnNlCi0gICAgPiB0aGF0IGltcGxlbWVudGF0aW9ucyB3aWxsIGFwcHJveGltYXRlIEpTT04gbnVt
YmVycyB3aXRoaW4gdGhlIGV4cGVjdGVkCi0gICAgPiBwcmVjaXNpb24uCi0KLSAgICBUaGlzIGlt
cGxlbWVudGF0aW9uIGRvZXMgZXhhY3RseSBmb2xsb3cgdGhpcyBhcHByb2FjaCwgYXMgaXQgdXNl
cyBkb3VibGUKLSAgICBwcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgbnVtYmVycy4gTm90ZSB2YWx1
ZXMgc21hbGxlciB0aGFuCi0gICAgYC0xLjc5NzY5MzEzNDg2MjMyZSszMDhgIGFuZCB2YWx1ZXMg
Z3JlYXRlciB0aGFuIGAxLjc5NzY5MzEzNDg2MjMyZSszMDhgCi0gICAgd2lsbCBiZSBzdG9yZWQg
YXMgTmFOIGludGVybmFsbHkgYW5kIGJlIHNlcmlhbGl6ZWQgdG8gYG51bGxgLgotCi0gICAgIyMj
IyBTdG9yYWdlCi0KLSAgICBGbG9hdGluZy1wb2ludCBudW1iZXIgdmFsdWVzIGFyZSBzdG9yZWQg
ZGlyZWN0bHkgaW5zaWRlIGEgQHJlZiBiYXNpY19qc29uCi0gICAgdHlwZS4KLQotICAgIEBzYSBA
cmVmIG51bWJlcl9pbnRlZ2VyX3QgLS0gdHlwZSBmb3IgbnVtYmVyIHZhbHVlcyAoaW50ZWdlcikK
LQotICAgIEBzYSBAcmVmIG51bWJlcl91bnNpZ25lZF90IC0tIHR5cGUgZm9yIG51bWJlciB2YWx1
ZXMgKHVuc2lnbmVkIGludGVnZXIpCi0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICov
Ci0gICAgdXNpbmcgbnVtYmVyX2Zsb2F0X3QgPSBOdW1iZXJGbG9hdFR5cGU7Ci0KLSAgICAvLy8g
QH0KLQotICBwcml2YXRlOgotCi0gICAgLy8vIGhlbHBlciBmb3IgZXhjZXB0aW9uLXNhZmUgb2Jq
ZWN0IGNyZWF0aW9uCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4K
LSAgICBzdGF0aWMgVCogY3JlYXRlKEFyZ3MmJiAuLi4gYXJncykKLSAgICB7Ci0gICAgICAgIEFs
bG9jYXRvclR5cGU8VD4gYWxsb2M7Ci0gICAgICAgIGF1dG8gZGVsZXRlciA9IFsmXShUICogb2Jq
ZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBhbGxvYy5kZWFsbG9jYXRlKG9iamVjdCwgMSk7
Ci0gICAgICAgIH07Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxULCBkZWNsdHlwZShkZWxldGVy
KT4gb2JqZWN0KGFsbG9jLmFsbG9jYXRlKDEpLCBkZWxldGVyKTsKLSAgICAgICAgYWxsb2MuY29u
c3RydWN0KG9iamVjdC5nZXQoKSwgc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKTsKLSAgICAg
ICAgYXNzZXJ0KG9iamVjdCAhPSBudWxscHRyKTsKLSAgICAgICAgcmV0dXJuIG9iamVjdC5yZWxl
YXNlKCk7Ci0gICAgfQotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gSlNP
TiB2YWx1ZSBzdG9yYWdlIC8vCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgICAv
KiEKLSAgICBAYnJpZWYgYSBKU09OIHZhbHVlCi0KLSAgICBUaGUgYWN0dWFsIHN0b3JhZ2UgZm9y
IGEgSlNPTiB2YWx1ZSBvZiB0aGUgQHJlZiBiYXNpY19qc29uIGNsYXNzLiBUaGlzCi0gICAgdW5p
b24gY29tYmluZXMgdGhlIGRpZmZlcmVudCBzdG9yYWdlIHR5cGVzIGZvciB0aGUgSlNPTiB2YWx1
ZSB0eXBlcwotICAgIGRlZmluZWQgaW4gQHJlZiB2YWx1ZV90LgotCi0gICAgSlNPTiB0eXBlIHwg
dmFsdWVfdCB0eXBlICAgIHwgdXNlZCB0eXBlCi0gICAgLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0t
LS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgb2JqZWN0ICAgIHwgb2JqZWN0ICAg
ICAgICAgIHwgcG9pbnRlciB0byBAcmVmIG9iamVjdF90Ci0gICAgYXJyYXkgICAgIHwgYXJyYXkg
ICAgICAgICAgIHwgcG9pbnRlciB0byBAcmVmIGFycmF5X3QKLSAgICBzdHJpbmcgICAgfCBzdHJp
bmcgICAgICAgICAgfCBwb2ludGVyIHRvIEByZWYgc3RyaW5nX3QKLSAgICBib29sZWFuICAgfCBi
b29sZWFuICAgICAgICAgfCBAcmVmIGJvb2xlYW5fdAotICAgIG51bWJlciAgICB8IG51bWJlcl9p
bnRlZ2VyICB8IEByZWYgbnVtYmVyX2ludGVnZXJfdAotICAgIG51bWJlciAgICB8IG51bWJlcl91
bnNpZ25lZCB8IEByZWYgbnVtYmVyX3Vuc2lnbmVkX3QKLSAgICBudW1iZXIgICAgfCBudW1iZXJf
ZmxvYXQgICAgfCBAcmVmIG51bWJlcl9mbG9hdF90Ci0gICAgbnVsbCAgICAgIHwgbnVsbCAgICAg
ICAgICAgIHwgKm5vIHZhbHVlIGlzIHN0b3JlZCoKLQotICAgIEBub3RlIFZhcmlhYmxlLWxlbmd0
aCB0eXBlcyAob2JqZWN0cywgYXJyYXlzLCBhbmQgc3RyaW5ncykgYXJlIHN0b3JlZCBhcwotICAg
IHBvaW50ZXJzLiBUaGUgc2l6ZSBvZiB0aGUgdW5pb24gc2hvdWxkIG5vdCBleGNlZWQgNjQgYml0
cyBpZiB0aGUgZGVmYXVsdAotICAgIHZhbHVlIHR5cGVzIGFyZSB1c2VkLgotCi0gICAgQHNpbmNl
IHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIHVuaW9uIGpzb25fdmFsdWUKLSAgICB7Ci0gICAg
ICAgIC8vLyBvYmplY3QgKHN0b3JlZCB3aXRoIHBvaW50ZXIgdG8gc2F2ZSBzdG9yYWdlKQotICAg
ICAgICBvYmplY3RfdCogb2JqZWN0OwotICAgICAgICAvLy8gYXJyYXkgKHN0b3JlZCB3aXRoIHBv
aW50ZXIgdG8gc2F2ZSBzdG9yYWdlKQotICAgICAgICBhcnJheV90KiBhcnJheTsKLSAgICAgICAg
Ly8vIHN0cmluZyAoc3RvcmVkIHdpdGggcG9pbnRlciB0byBzYXZlIHN0b3JhZ2UpCi0gICAgICAg
IHN0cmluZ190KiBzdHJpbmc7Ci0gICAgICAgIC8vLyBib29sZWFuCi0gICAgICAgIGJvb2xlYW5f
dCBib29sZWFuOwotICAgICAgICAvLy8gbnVtYmVyIChpbnRlZ2VyKQotICAgICAgICBudW1iZXJf
aW50ZWdlcl90IG51bWJlcl9pbnRlZ2VyOwotICAgICAgICAvLy8gbnVtYmVyICh1bnNpZ25lZCBp
bnRlZ2VyKQotICAgICAgICBudW1iZXJfdW5zaWduZWRfdCBudW1iZXJfdW5zaWduZWQ7Ci0gICAg
ICAgIC8vLyBudW1iZXIgKGZsb2F0aW5nLXBvaW50KQotICAgICAgICBudW1iZXJfZmxvYXRfdCBu
dW1iZXJfZmxvYXQ7Ci0KLSAgICAgICAgLy8vIGRlZmF1bHQgY29uc3RydWN0b3IgKGZvciBudWxs
IHZhbHVlcykKLSAgICAgICAganNvbl92YWx1ZSgpID0gZGVmYXVsdDsKLSAgICAgICAgLy8vIGNv
bnN0cnVjdG9yIGZvciBib29sZWFucwotICAgICAgICBqc29uX3ZhbHVlKGJvb2xlYW5fdCB2KSBu
b2V4Y2VwdCA6IGJvb2xlYW4odikge30KLSAgICAgICAgLy8vIGNvbnN0cnVjdG9yIGZvciBudW1i
ZXJzIChpbnRlZ2VyKQotICAgICAgICBqc29uX3ZhbHVlKG51bWJlcl9pbnRlZ2VyX3Qgdikgbm9l
eGNlcHQgOiBudW1iZXJfaW50ZWdlcih2KSB7fQotICAgICAgICAvLy8gY29uc3RydWN0b3IgZm9y
IG51bWJlcnMgKHVuc2lnbmVkKQotICAgICAgICBqc29uX3ZhbHVlKG51bWJlcl91bnNpZ25lZF90
IHYpIG5vZXhjZXB0IDogbnVtYmVyX3Vuc2lnbmVkKHYpIHt9Ci0gICAgICAgIC8vLyBjb25zdHJ1
Y3RvciBmb3IgbnVtYmVycyAoZmxvYXRpbmctcG9pbnQpCi0gICAgICAgIGpzb25fdmFsdWUobnVt
YmVyX2Zsb2F0X3Qgdikgbm9leGNlcHQgOiBudW1iZXJfZmxvYXQodikge30KLSAgICAgICAgLy8v
IGNvbnN0cnVjdG9yIGZvciBlbXB0eSB2YWx1ZXMgb2YgYSBnaXZlbiB0eXBlCi0gICAgICAgIGpz
b25fdmFsdWUodmFsdWVfdCB0KQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKHQpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6Ci0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBvYmplY3QgPSBjcmVhdGU8b2JqZWN0
X3Q+KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6Ci0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICBhcnJheSA9IGNyZWF0ZTxhcnJheV90PigpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBj
YXNlIHZhbHVlX3Q6OnN0cmluZzoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHN0cmluZyA9IGNyZWF0ZTxzdHJpbmdfdD4oIiIpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6
OmJvb2xlYW46Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBib29sZWFu
ID0gYm9vbGVhbl90KGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdl
cjoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlcl9pbnRlZ2Vy
ID0gbnVtYmVyX2ludGVnZXJfdCgwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfdW5z
aWduZWQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBudW1iZXJfdW5z
aWduZWQgPSBudW1iZXJfdW5zaWduZWRfdCgwKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1i
ZXJfZmxvYXQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBudW1iZXJf
ZmxvYXQgPSBudW1iZXJfZmxvYXRfdCgwLjApOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT0gdmFsdWVfdDo6bnVsbCkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFp
bl9lcnJvcigiOTYxYzE1MWQyZTg3ZjI2ODZhOTU1YTliZTI0ZDMxNmYxMzYyYmYyMSAyLjEuMSIp
KTsgLy8gTENPVl9FWENMX0xJTkUKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICAvLy8gY29uc3RydWN0b3IgZm9yIHN0cmluZ3MKLSAgICAgICAganNvbl92
YWx1ZShjb25zdCBzdHJpbmdfdCYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN0cmlu
ZyA9IGNyZWF0ZTxzdHJpbmdfdD4odmFsdWUpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIGNv
bnN0cnVjdG9yIGZvciBvYmplY3RzCi0gICAgICAgIGpzb25fdmFsdWUoY29uc3Qgb2JqZWN0X3Qm
IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBvYmplY3QgPSBjcmVhdGU8b2JqZWN0X3Q+
KHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyBjb25zdHJ1Y3RvciBmb3IgYXJyYXlz
Ci0gICAgICAgIGpzb25fdmFsdWUoY29uc3QgYXJyYXlfdCYgdmFsdWUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGFycmF5ID0gY3JlYXRlPGFycmF5X3Q+KHZhbHVlKTsKLSAgICAgICAgfQotICAg
IH07Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgY2hlY2tzIHRoZSBjbGFzcyBpbnZhcmlhbnRzCi0K
LSAgICBUaGlzIGZ1bmN0aW9uIGFzc2VydHMgdGhlIGNsYXNzIGludmFyaWFudHMuIEl0IG5lZWRz
IHRvIGJlIGNhbGxlZCBhdCB0aGUKLSAgICBlbmQgb2YgZXZlcnkgY29uc3RydWN0b3IgdG8gbWFr
ZSBzdXJlIHRoYXQgY3JlYXRlZCBvYmplY3RzIHJlc3BlY3QgdGhlCi0gICAgaW52YXJpYW50LiBG
dXJ0aGVybW9yZSwgaXQgaGFzIHRvIGJlIGNhbGxlZCBlYWNoIHRpbWUgdGhlIHR5cGUgb2YgYSBK
U09OCi0gICAgdmFsdWUgaXMgY2hhbmdlZCwgYmVjYXVzZSB0aGUgaW52YXJpYW50IGV4cHJlc3Nl
cyBhIHJlbGF0aW9uc2hpcCBiZXR3ZWVuCi0gICAgQGEgbV90eXBlIGFuZCBAYSBtX3ZhbHVlLgot
ICAgICovCi0gICAgdm9pZCBhc3NlcnRfaW52YXJpYW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IGFzc2VydChtX3R5cGUgIT0gdmFsdWVfdDo6b2JqZWN0IG9yIG1fdmFsdWUub2JqZWN0ICE9IG51
bGxwdHIpOwotICAgICAgICBhc3NlcnQobV90eXBlICE9IHZhbHVlX3Q6OmFycmF5IG9yIG1fdmFs
dWUuYXJyYXkgIT0gbnVsbHB0cik7Ci0gICAgICAgIGFzc2VydChtX3R5cGUgIT0gdmFsdWVfdDo6
c3RyaW5nIG9yIG1fdmFsdWUuc3RyaW5nICE9IG51bGxwdHIpOwotICAgIH0KLQotICBwdWJsaWM6
Ci0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBKU09OIHBhcnNlciBjYWxs
YmFjayAvLwotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgICAvKiEKLSAgICBA
YnJpZWYgSlNPTiBjYWxsYmFjayBldmVudHMKLQotICAgIFRoaXMgZW51bWVyYXRpb24gbGlzdHMg
dGhlIHBhcnNlciBldmVudHMgdGhhdCBjYW4gdHJpZ2dlciBjYWxsaW5nIGEKLSAgICBjYWxsYmFj
ayBmdW5jdGlvbiBvZiB0eXBlIEByZWYgcGFyc2VyX2NhbGxiYWNrX3QgZHVyaW5nIHBhcnNpbmcu
Ci0KLSAgICBAaW1hZ2UgaHRtbCBjYWxsYmFja19ldmVudHMucG5nICJFeGFtcGxlIHdoZW4gY2Vy
dGFpbiBwYXJzZSBldmVudHMgYXJlIHRyaWdnZXJlZCIKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEu
MC4wCi0gICAgKi8KLSAgICBlbnVtIGNsYXNzIHBhcnNlX2V2ZW50X3QgOiB1aW50OF90Ci0gICAg
ewotICAgICAgICAvLy8gdGhlIHBhcnNlciByZWFkIGB7YCBhbmQgc3RhcnRlZCB0byBwcm9jZXNz
IGEgSlNPTiBvYmplY3QKLSAgICAgICAgb2JqZWN0X3N0YXJ0LAotICAgICAgICAvLy8gdGhlIHBh
cnNlciByZWFkIGB9YCBhbmQgZmluaXNoZWQgcHJvY2Vzc2luZyBhIEpTT04gb2JqZWN0Ci0gICAg
ICAgIG9iamVjdF9lbmQsCi0gICAgICAgIC8vLyB0aGUgcGFyc2VyIHJlYWQgYFtgIGFuZCBzdGFy
dGVkIHRvIHByb2Nlc3MgYSBKU09OIGFycmF5Ci0gICAgICAgIGFycmF5X3N0YXJ0LAotICAgICAg
ICAvLy8gdGhlIHBhcnNlciByZWFkIGBdYCBhbmQgZmluaXNoZWQgcHJvY2Vzc2luZyBhIEpTT04g
YXJyYXkKLSAgICAgICAgYXJyYXlfZW5kLAotICAgICAgICAvLy8gdGhlIHBhcnNlciByZWFkIGEg
a2V5IG9mIGEgdmFsdWUgaW4gYW4gb2JqZWN0Ci0gICAgICAgIGtleSwKLSAgICAgICAgLy8vIHRo
ZSBwYXJzZXIgZmluaXNoZWQgcmVhZGluZyBhIEpTT04gdmFsdWUKLSAgICAgICAgdmFsdWUKLSAg
ICB9OwotCi0gICAgLyohCi0gICAgQGJyaWVmIHBlci1lbGVtZW50IHBhcnNlciBjYWxsYmFjayB0
eXBlCi0KLSAgICBXaXRoIGEgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgcmVzdWx0IG9m
IHBhcnNpbmcgYSBKU09OIHRleHQgY2FuIGJlCi0gICAgaW5mbHVlbmNlZC4gV2hlbiBwYXNzZWQg
dG8gQHJlZiBwYXJzZShzdGQ6OmlzdHJlYW0mLCBjb25zdAotICAgIHBhcnNlcl9jYWxsYmFja190
KSBvciBAcmVmIHBhcnNlKGNvbnN0IENoYXJULCBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCksCi0g
ICAgaXQgaXMgY2FsbGVkIG9uIGNlcnRhaW4gZXZlbnRzIChwYXNzZWQgYXMgQHJlZiBwYXJzZV9l
dmVudF90IHZpYSBwYXJhbWV0ZXIKLSAgICBAYSBldmVudCkgd2l0aCBhIHNldCByZWN1cnNpb24g
ZGVwdGggQGEgZGVwdGggYW5kIGNvbnRleHQgSlNPTiB2YWx1ZQotICAgIEBhIHBhcnNlZC4gVGhl
IHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgYSBib29sZWFuCi0gICAg
aW5kaWNhdGluZyB3aGV0aGVyIHRoZSBlbGVtZW50IHRoYXQgZW1pdHRlZCB0aGUgY2FsbGJhY2sg
c2hhbGwgYmUga2VwdCBvcgotICAgIG5vdC4KLQotICAgIFdlIGRpc3Rpbmd1aXNoIHNpeCBzY2Vu
YXJpb3MgKGRldGVybWluZWQgYnkgdGhlIGV2ZW50IHR5cGUpIGluIHdoaWNoIHRoZQotICAgIGNh
bGxiYWNrIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQuIFRoZSBmb2xsb3dpbmcgdGFibGUgZGVzY3Jp
YmVzIHRoZSB2YWx1ZXMKLSAgICBvZiB0aGUgcGFyYW1ldGVycyBAYSBkZXB0aCwgQGEgZXZlbnQs
IGFuZCBAYSBwYXJzZWQuCi0KLSAgICBwYXJhbWV0ZXIgQGEgZXZlbnQgfCBkZXNjcmlwdGlvbiB8
IHBhcmFtZXRlciBAYSBkZXB0aCB8IHBhcmFtZXRlciBAYSBwYXJzZWQKLSAgICAtLS0tLS0tLS0t
LS0tLS0tLS0gfCAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0t
LS0tLS0tLS0KLSAgICBwYXJzZV9ldmVudF90OjpvYmplY3Rfc3RhcnQgfCB0aGUgcGFyc2VyIHJl
YWQgYHtgIGFuZCBzdGFydGVkIHRvIHByb2Nlc3MgYSBKU09OIG9iamVjdCB8IGRlcHRoIG9mIHRo
ZSBwYXJlbnQgb2YgdGhlIEpTT04gb2JqZWN0IHwgYSBKU09OIHZhbHVlIHdpdGggdHlwZSBkaXNj
YXJkZWQKLSAgICBwYXJzZV9ldmVudF90OjprZXkgfCB0aGUgcGFyc2VyIHJlYWQgYSBrZXkgb2Yg
YSB2YWx1ZSBpbiBhbiBvYmplY3QgfCBkZXB0aCBvZiB0aGUgY3VycmVudGx5IHBhcnNlZCBKU09O
IG9iamVjdCB8IGEgSlNPTiBzdHJpbmcgY29udGFpbmluZyB0aGUga2V5Ci0gICAgcGFyc2VfZXZl
bnRfdDo6b2JqZWN0X2VuZCB8IHRoZSBwYXJzZXIgcmVhZCBgfWAgYW5kIGZpbmlzaGVkIHByb2Nl
c3NpbmcgYSBKU09OIG9iamVjdCB8IGRlcHRoIG9mIHRoZSBwYXJlbnQgb2YgdGhlIEpTT04gb2Jq
ZWN0IHwgdGhlIHBhcnNlZCBKU09OIG9iamVjdAotICAgIHBhcnNlX2V2ZW50X3Q6OmFycmF5X3N0
YXJ0IHwgdGhlIHBhcnNlciByZWFkIGBbYCBhbmQgc3RhcnRlZCB0byBwcm9jZXNzIGEgSlNPTiBh
cnJheSB8IGRlcHRoIG9mIHRoZSBwYXJlbnQgb2YgdGhlIEpTT04gYXJyYXkgfCBhIEpTT04gdmFs
dWUgd2l0aCB0eXBlIGRpc2NhcmRlZAotICAgIHBhcnNlX2V2ZW50X3Q6OmFycmF5X2VuZCB8IHRo
ZSBwYXJzZXIgcmVhZCBgXWAgYW5kIGZpbmlzaGVkIHByb2Nlc3NpbmcgYSBKU09OIGFycmF5IHwg
ZGVwdGggb2YgdGhlIHBhcmVudCBvZiB0aGUgSlNPTiBhcnJheSB8IHRoZSBwYXJzZWQgSlNPTiBh
cnJheQotICAgIHBhcnNlX2V2ZW50X3Q6OnZhbHVlIHwgdGhlIHBhcnNlciBmaW5pc2hlZCByZWFk
aW5nIGEgSlNPTiB2YWx1ZSB8IGRlcHRoIG9mIHRoZSB2YWx1ZSB8IHRoZSBwYXJzZWQgSlNPTiB2
YWx1ZQotCi0gICAgQGltYWdlIGh0bWwgY2FsbGJhY2tfZXZlbnRzLnBuZyAiRXhhbXBsZSB3aGVu
IGNlcnRhaW4gcGFyc2UgZXZlbnRzIGFyZSB0cmlnZ2VyZWQiCi0KLSAgICBEaXNjYXJkaW5nIGEg
dmFsdWUgKGkuZS4sIHJldHVybmluZyBgZmFsc2VgKSBoYXMgZGlmZmVyZW50IGVmZmVjdHMKLSAg
ICBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgaW4gd2hpY2ggZnVuY3Rpb24gd2FzIGNhbGxlZDoK
LQotICAgIC0gRGlzY2FyZGVkIHZhbHVlcyBpbiBzdHJ1Y3R1cmVkIHR5cGVzIGFyZSBza2lwcGVk
LiBUaGF0IGlzLCB0aGUgcGFyc2VyCi0gICAgICB3aWxsIGJlaGF2ZSBhcyBpZiB0aGUgZGlzY2Fy
ZGVkIHZhbHVlIHdhcyBuZXZlciByZWFkLgotICAgIC0gSW4gY2FzZSBhIHZhbHVlIG91dHNpZGUg
YSBzdHJ1Y3R1cmVkIHR5cGUgaXMgc2tpcHBlZCwgaXQgaXMgcmVwbGFjZWQKLSAgICAgIHdpdGgg
YG51bGxgLiBUaGlzIGNhc2UgaGFwcGVucyBpZiB0aGUgdG9wLWxldmVsIGVsZW1lbnQgaXMgc2tp
cHBlZC4KLQotICAgIEBwYXJhbVtpbl0gZGVwdGggIHRoZSBkZXB0aCBvZiB0aGUgcmVjdXJzaW9u
IGR1cmluZyBwYXJzaW5nCi0KLSAgICBAcGFyYW1baW5dIGV2ZW50ICBhbiBldmVudCBvZiB0eXBl
IHBhcnNlX2V2ZW50X3QgaW5kaWNhdGluZyB0aGUgY29udGV4dCBpbgotICAgIHRoZSBjYWxsYmFj
ayBmdW5jdGlvbiBoYXMgYmVlbiBjYWxsZWQKLQotICAgIEBwYXJhbVtpbixvdXRdIHBhcnNlZCAg
dGhlIGN1cnJlbnQgaW50ZXJtZWRpYXRlIHBhcnNlIHJlc3VsdDsgbm90ZSB0aGF0Ci0gICAgd3Jp
dGluZyB0byB0aGlzIHZhbHVlIGhhcyBubyBlZmZlY3QgZm9yIHBhcnNlX2V2ZW50X3Q6OmtleSBl
dmVudHMKLQotICAgIEByZXR1cm4gV2hldGhlciB0aGUgSlNPTiB2YWx1ZSB3aGljaCBjYWxsZWQg
dGhlIGZ1bmN0aW9uIGR1cmluZyBwYXJzaW5nCi0gICAgc2hvdWxkIGJlIGtlcHQgKGB0cnVlYCkg
b3Igbm90IChgZmFsc2VgKS4gSW4gdGhlIGxhdHRlciBjYXNlLCBpdCBpcyBlaXRoZXIKLSAgICBz
a2lwcGVkIGNvbXBsZXRlbHkgb3IgcmVwbGFjZWQgYnkgYW4gZW1wdHkgZGlzY2FyZGVkIG9iamVj
dC4KLQotICAgIEBzYSBAcmVmIHBhcnNlKHN0ZDo6aXN0cmVhbSYsIHBhcnNlcl9jYWxsYmFja190
KSBvcgotICAgIEByZWYgcGFyc2UoY29uc3QgQ2hhclQsIGNvbnN0IHBhcnNlcl9jYWxsYmFja190
KSBmb3IgZXhhbXBsZXMKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICB1
c2luZyBwYXJzZXJfY2FsbGJhY2tfdCA9IHN0ZDo6ZnVuY3Rpb248Ym9vbChpbnQgZGVwdGgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9ldmVudF90IGV2ZW50LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNfanNvbiYgcGFyc2VkKT47Ci0KLQotICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLwotICAgIC8vIGNvbnN0cnVjdG9ycyAvLwotICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLwotCi0gICAgLy8vIEBuYW1lIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMKLSAg
ICAvLy8gQ29uc3RydWN0b3JzIG9mIGNsYXNzIEByZWYgYmFzaWNfanNvbiwgY29weS9tb3ZlIGNv
bnN0cnVjdG9yLCBjb3B5Ci0gICAgLy8vIGFzc2lnbm1lbnQsIHN0YXRpYyBmdW5jdGlvbnMgY3Jl
YXRpbmcgb2JqZWN0cywgYW5kIHRoZSBkZXN0cnVjdG9yLgotICAgIC8vLyBAewotCi0gICAgLyoh
Ci0gICAgQGJyaWVmIGNyZWF0ZSBhbiBlbXB0eSB2YWx1ZSB3aXRoIGEgZ2l2ZW4gdHlwZQotCi0g
ICAgQ3JlYXRlIGFuIGVtcHR5IEpTT04gdmFsdWUgd2l0aCBhIGdpdmVuIHR5cGUuIFRoZSB2YWx1
ZSB3aWxsIGJlIGRlZmF1bHQKLSAgICBpbml0aWFsaXplZCB3aXRoIGFuIGVtcHR5IHZhbHVlIHdo
aWNoIGRlcGVuZHMgb24gdGhlIHR5cGU6Ci0KLSAgICBWYWx1ZSB0eXBlICB8IGluaXRpYWwgdmFs
dWUKLSAgICAtLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0KLSAgICBudWxsICAgICAgICB8IGBu
dWxsYAotICAgIGJvb2xlYW4gICAgIHwgYGZhbHNlYAotICAgIHN0cmluZyAgICAgIHwgYCIiYAot
ICAgIG51bWJlciAgICAgIHwgYDBgCi0gICAgb2JqZWN0ICAgICAgfCBge31gCi0gICAgYXJyYXkg
ICAgICAgfCBgW11gCi0KLSAgICBAcGFyYW1baW5dIHZhbHVlX3R5cGUgIHRoZSB0eXBlIG9mIHRo
ZSB2YWx1ZSB0byBjcmVhdGUKLQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgotCi0gICAgQHRo
cm93IHN0ZDo6YmFkX2FsbG9jIGlmIGFsbG9jYXRpb24gZm9yIG9iamVjdCwgYXJyYXksIG9yIHN0
cmluZyB2YWx1ZQotICAgIGZhaWxzCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBj
b2RlIHNob3dzIHRoZSBjb25zdHJ1Y3RvciBmb3IgZGlmZmVyZW50IEByZWYKLSAgICB2YWx1ZV90
IHZhbHVlcyxiYXNpY19qc29uX192YWx1ZV90fQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAK
LSAgICAqLwotICAgIGJhc2ljX2pzb24oY29uc3QgdmFsdWVfdCB2YWx1ZV90eXBlKQotICAgICAg
ICA6IG1fdHlwZSh2YWx1ZV90eXBlKSwgbV92YWx1ZSh2YWx1ZV90eXBlKQotICAgIHsKLSAgICAg
ICAgYXNzZXJ0X2ludmFyaWFudCgpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBjcmVh
dGUgYSBudWxsIG9iamVjdAotCi0gICAgQ3JlYXRlIGEgYG51bGxgIEpTT04gdmFsdWUuIEl0IGVp
dGhlciB0YWtlcyBhIG51bGwgcG9pbnRlciBhcyBwYXJhbWV0ZXIKLSAgICAoZXhwbGljaXRseSBj
cmVhdGluZyBgbnVsbGApIG9yIG5vIHBhcmFtZXRlciAoaW1wbGljaXRseSBjcmVhdGluZyBgbnVs
bGApLgotICAgIFRoZSBwYXNzZWQgbnVsbCBwb2ludGVyIGl0c2VsZiBpcyBub3QgcmVhZCAtLSBp
dCBpcyBvbmx5IHVzZWQgdG8gY2hvb3NlCi0gICAgdGhlIHJpZ2h0IGNvbnN0cnVjdG9yLgotCi0g
ICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCi0KLSAgICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93
IGd1YXJhbnRlZTogdGhpcyBjb25zdHJ1Y3RvciBuZXZlciB0aHJvd3MKLSAgICBleGNlcHRpb25z
LgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93cyB0aGUgY29uc3Ry
dWN0b3Igd2l0aCBhbmQgd2l0aG91dCBhCi0gICAgbnVsbCBwb2ludGVyIHBhcmFtZXRlci4sYmFz
aWNfanNvbl9fbnVsbHB0cl90fQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwot
ICAgIGJhc2ljX2pzb24oc3RkOjpudWxscHRyX3QgPSBudWxscHRyKSBub2V4Y2VwdAotICAgICAg
ICA6IGJhc2ljX2pzb24odmFsdWVfdDo6bnVsbCkKLSAgICB7Ci0gICAgICAgIGFzc2VydF9pbnZh
cmlhbnQoKTsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgY3JlYXRlIGEgSlNPTiB2YWx1
ZQotCi0gICAgVGhpcyBpcyBhICJjYXRjaCBhbGwiIGNvbnN0cnVjdG9yIGZvciBhbGwgY29tcGF0
aWJsZSBKU09OIHR5cGVzOyB0aGF0IGlzLAotICAgIHR5cGVzIGZvciB3aGljaCBhIGB0b19qc29u
KClgIG1ldGhvZCBleHNpdHMuIFRoZSBjb25zdHJ1Y3RvciBmb3J3YXJkcyB0aGUKLSAgICBwYXJh
bWV0ZXIgQGEgdmFsIHRvIHRoYXQgbWV0aG9kICh0byBganNvbl9zZXJpYWxpemVyPFU+Ojp0b19q
c29uYCBtZXRob2QKLSAgICB3aXRoIGBVID0gdW5jdnJlZl90PENvbXBhdGlibGVUeXBlPmAsIHRv
IGJlIGV4YWN0KS4KLQotICAgIFRlbXBsYXRlIHR5cGUgQGEgQ29tcGF0aWJsZVR5cGUgaW5jbHVk
ZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgdGhlCi0gICAgZm9sbG93aW5nIHR5cGVzOgotICAg
IC0gKiphcnJheXMqKjogQHJlZiBhcnJheV90IGFuZCBhbGwga2luZHMgb2YgY29tcGF0aWJsZSBj
b250YWluZXJzIHN1Y2ggYXMKLSAgICAgIGBzdGQ6OnZlY3RvcmAsIGBzdGQ6OmRlcXVlYCwgYHN0
ZDo6bGlzdGAsIGBzdGQ6OmZvcndhcmRfbGlzdGAsCi0gICAgICBgc3RkOjphcnJheWAsIGBzdGQ6
OnNldGAsIGBzdGQ6OnVub3JkZXJlZF9zZXRgLCBgc3RkOjptdWx0aXNldGAsIGFuZAotICAgICAg
YHVub3JkZXJlZF9tdWx0aXNldGAgd2l0aCBhIGB2YWx1ZV90eXBlYCBmcm9tIHdoaWNoIGEgQHJl
ZiBiYXNpY19qc29uCi0gICAgICB2YWx1ZSBjYW4gYmUgY29uc3RydWN0ZWQuCi0gICAgLSAqKm9i
amVjdHMqKjogQHJlZiBvYmplY3RfdCBhbmQgYWxsIGtpbmRzIG9mIGNvbXBhdGlibGUgYXNzb2Np
YXRpdmUKLSAgICAgIGNvbnRhaW5lcnMgc3VjaCBhcyBgc3RkOjptYXBgLCBgc3RkOjp1bm9yZGVy
ZWRfbWFwYCwgYHN0ZDo6bXVsdGltYXBgLAotICAgICAgYW5kIGBzdGQ6OnVub3JkZXJlZF9tdWx0
aW1hcGAgd2l0aCBhIGBrZXlfdHlwZWAgY29tcGF0aWJsZSB0bwotICAgICAgQHJlZiBzdHJpbmdf
dCBhbmQgYSBgdmFsdWVfdHlwZWAgZnJvbSB3aGljaCBhIEByZWYgYmFzaWNfanNvbiB2YWx1ZSBj
YW4KLSAgICAgIGJlIGNvbnN0cnVjdGVkLgotICAgIC0gKipzdHJpbmdzKio6IEByZWYgc3RyaW5n
X3QsIHN0cmluZyBsaXRlcmFscywgYW5kIGFsbCBjb21wYXRpYmxlIHN0cmluZwotICAgICAgY29u
dGFpbmVycyBjYW4gYmUgdXNlZC4KLSAgICAtICoqbnVtYmVycyoqOiBAcmVmIG51bWJlcl9pbnRl
Z2VyX3QsIEByZWYgbnVtYmVyX3Vuc2lnbmVkX3QsCi0gICAgICBAcmVmIG51bWJlcl9mbG9hdF90
LCBhbmQgYWxsIGNvbnZlcnRpYmxlIG51bWJlciB0eXBlcyBzdWNoIGFzIGBpbnRgLAotICAgICAg
YHNpemVfdGAsIGBpbnQ2NF90YCwgYGZsb2F0YCBvciBgZG91YmxlYCBjYW4gYmUgdXNlZC4KLSAg
ICAtICoqYm9vbGVhbioqOiBAcmVmIGJvb2xlYW5fdCAvIGBib29sYCBjYW4gYmUgdXNlZC4KLQot
ICAgIFNlZSB0aGUgZXhhbXBsZXMgYmVsb3cuCi0KLSAgICBAdHBhcmFtIENvbXBhdGlibGVUeXBl
IGEgdHlwZSBzdWNoIHRoYXQ6Ci0gICAgLSBAYSBDb21wYXRpYmxlVHlwZSBpcyBub3QgZGVyaXZl
ZCBmcm9tIGBzdGQ6OmlzdHJlYW1gLAotICAgIC0gQGEgQ29tcGF0aWJsZVR5cGUgaXMgbm90IEBy
ZWYgYmFzaWNfanNvbiAodG8gYXZvaWQgaGlqYWNraW5nIGNvcHkvbW92ZQotICAgICAgICAgY29u
c3RydWN0b3JzKSwKLSAgICAtIEBhIENvbXBhdGlibGVUeXBlIGlzIG5vdCBhIEByZWYgYmFzaWNf
anNvbiBuZXN0ZWQgdHlwZSAoZS5nLiwKLSAgICAgICAgIEByZWYganNvbl9wb2ludGVyLCBAcmVm
IGl0ZXJhdG9yLCBldGMgLi4uKQotICAgIC0gQHJlZiBAcmVmIGpzb25fc2VyaWFsaXplcjxVPiBo
YXMgYQotICAgICAgICAgYHRvX2pzb24oYmFzaWNfanNvbl90JiwgQ29tcGF0aWJsZVR5cGUmJilg
IG1ldGhvZAotCi0gICAgQHRwYXJhbSBVID0gYHVuY3ZyZWZfdDxDb21wYXRpYmxlVHlwZT5gCi0K
LSAgICBAcGFyYW1baW5dIHZhbCB0aGUgdmFsdWUgdG8gYmUgZm9yd2FyZGVkCi0KLSAgICBAY29t
cGxleGl0eSBVc3VhbGx5IGxpbmVhciBpbiB0aGUgc2l6ZSBvZiB0aGUgcGFzc2VkIEBhIHZhbCwg
YWxzbwotICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24gb2Yg
dGhlIGNhbGxlZCBgdG9fanNvbigpYAotICAgICAgICAgICAgICAgIG1ldGhvZC4KLQotICAgIEB0
aHJvdyB3aGF0IGBqc29uX3NlcmlhbGl6ZXI8VT46OnRvX2pzb24oKWAgdGhyb3dzCi0KLSAgICBA
bGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIHRoZSBjb25zdHJ1Y3RvciB3aXRo
IHNldmVyYWwKLSAgICBjb21wYXRpYmxlIHR5cGVzLixiYXNpY19qc29uX19Db21wYXRpYmxlVHlw
ZX0KLQotICAgIEBzaW5jZSB2ZXJzaW9uIDIuMS4wCi0gICAgKi8KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb21wYXRpYmxlVHlwZSwgdHlwZW5hbWUgVSA9IGRldGFpbDo6dW5jdnJlZl90PENvbXBh
dGlibGVUeXBlPiwKLSAgICAgICAgICAgICBkZXRhaWw6OmVuYWJsZV9pZl90PG5vdCBzdGQ6Omlz
X2Jhc2Vfb2Y8c3RkOjppc3RyZWFtLCBVPjo6dmFsdWUgYW5kCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub3Qgc3RkOjppc19zYW1lPFUsIGJhc2ljX2pzb25fdD46OnZhbHVlIGFu
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGRldGFpbDo6aXNfYmFzaWNf
anNvbl9uZXN0ZWRfdHlwZTwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
YXNpY19qc29uX3QsIFU+Ojp2YWx1ZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRldGFpbDo6aGFzX3RvX2pzb248YmFzaWNfanNvbiwgVT46OnZhbHVlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50PiA9IDA+Ci0gICAgYmFzaWNfanNvbihDb21wYXRp
YmxlVHlwZSAmJiB2YWwpIG5vZXhjZXB0KG5vZXhjZXB0KEpTT05TZXJpYWxpemVyPFU+Ojp0b19q
c29uKAotICAgICAgICAgICAgICAgIHN0ZDo6ZGVjbHZhbDxiYXNpY19qc29uX3QmPigpLCBzdGQ6
OmZvcndhcmQ8Q29tcGF0aWJsZVR5cGU+KHZhbCkpKSkKLSAgICB7Ci0gICAgICAgIEpTT05TZXJp
YWxpemVyPFU+Ojp0b19qc29uKCp0aGlzLCBzdGQ6OmZvcndhcmQ8Q29tcGF0aWJsZVR5cGU+KHZh
bCkpOwotICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7Ci0gICAgfQotCi0gICAgLyohCi0gICAg
QGJyaWVmIGNyZWF0ZSBhIGNvbnRhaW5lciAoYXJyYXkgb3Igb2JqZWN0KSBmcm9tIGFuIGluaXRp
YWxpemVyIGxpc3QKLQotICAgIENyZWF0ZXMgYSBKU09OIHZhbHVlIG9mIHR5cGUgYXJyYXkgb3Ig
b2JqZWN0IGZyb20gdGhlIHBhc3NlZCBpbml0aWFsaXplcgotICAgIGxpc3QgQGEgaW5pdC4gSW4g
Y2FzZSBAYSB0eXBlX2RlZHVjdGlvbiBpcyBgdHJ1ZWAgKGRlZmF1bHQpLCB0aGUgdHlwZSBvZgot
ICAgIHRoZSBKU09OIHZhbHVlIHRvIGJlIGNyZWF0ZWQgaXMgZGVkdWN0ZWQgZnJvbSB0aGUgaW5p
dGlhbGl6ZXIgbGlzdCBAYSBpbml0Ci0gICAgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcnVs
ZXM6Ci0KLSAgICAxLiBJZiB0aGUgbGlzdCBpcyBlbXB0eSwgYW4gZW1wdHkgSlNPTiBvYmplY3Qg
dmFsdWUgYHt9YCBpcyBjcmVhdGVkLgotICAgIDIuIElmIHRoZSBsaXN0IGNvbnNpc3RzIG9mIHBh
aXJzIHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgYSBzdHJpbmcsIGEgSlNPTgotICAgICAgIG9iamVj
dCB2YWx1ZSBpcyBjcmVhdGVkIHdoZXJlIHRoZSBmaXJzdCBlbGVtZW50cyBvZiB0aGUgcGFpcnMg
YXJlCi0gICAgICAgdHJlYXRlZCBhcyBrZXlzIGFuZCB0aGUgc2Vjb25kIGVsZW1lbnRzIGFyZSBh
cyB2YWx1ZXMuCi0gICAgMy4gSW4gYWxsIG90aGVyIGNhc2VzLCBhbiBhcnJheSBpcyBjcmVhdGVk
LgotCi0gICAgVGhlIHJ1bGVzIGFpbSB0byBjcmVhdGUgdGhlIGJlc3QgZml0IGJldHdlZW4gYSBD
KysgaW5pdGlhbGl6ZXIgbGlzdCBhbmQKLSAgICBKU09OIHZhbHVlcy4gVGhlIHJhdGlvbmFsZSBp
cyBhcyBmb2xsb3dzOgotCi0gICAgMS4gVGhlIGVtcHR5IGluaXRpYWxpemVyIGxpc3QgaXMgd3Jp
dHRlbiBhcyBge31gIHdoaWNoIGlzIGV4YWN0bHkgYW4gZW1wdHkKLSAgICAgICBKU09OIG9iamVj
dC4KLSAgICAyLiBDKysgaGFzIG5vdyB3YXkgb2YgZGVzY3JpYmluZyBtYXBwZWQgdHlwZXMgb3Ro
ZXIgdGhhbiB0byBsaXN0IGEgbGlzdCBvZgotICAgICAgIHBhaXJzLiBBcyBKU09OIHJlcXVpcmVz
IHRoYXQga2V5cyBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLCBydWxlIDIgaXMgdGhlCi0gICAgICAg
d2Vha2VzdCBjb25zdHJhaW50IG9uZSBjYW4gcG9zZSBvbiBpbml0aWFsaXplciBsaXN0cyB0byBp
bnRlcnByZXQgdGhlbQotICAgICAgIGFzIGFuIG9iamVjdC4KLSAgICAzLiBJbiBhbGwgb3RoZXIg
Y2FzZXMsIHRoZSBpbml0aWFsaXplciBsaXN0IGNvdWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcwot
ICAgICAgIEpTT04gb2JqZWN0IHR5cGUsIHNvIGludGVycHJldGluZyBpdCBhcyBKU09OIGFycmF5
IHR5cGUgaXMgc2FmZS4KLQotICAgIFdpdGggdGhlIHJ1bGVzIGRlc2NyaWJlZCBhYm92ZSwgdGhl
IGZvbGxvd2luZyBKU09OIHZhbHVlcyBjYW5ub3QgYmUKLSAgICBleHByZXNzZWQgYnkgYW4gaW5p
dGlhbGl6ZXIgbGlzdDoKLQotICAgIC0gdGhlIGVtcHR5IGFycmF5IChgW11gKTogdXNlIEByZWYg
YXJyYXkoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KQotICAgICAgd2l0aCBhbiBl
bXB0eSBpbml0aWFsaXplciBsaXN0IGluIHRoaXMgY2FzZQotICAgIC0gYXJyYXlzIHdob3NlIGVs
ZW1lbnRzIHNhdGlzZnkgcnVsZSAyOiB1c2UgQHJlZgotICAgICAgYXJyYXkoc3RkOjppbml0aWFs
aXplcl9saXN0PGJhc2ljX2pzb24+KSB3aXRoIHRoZSBzYW1lIGluaXRpYWxpemVyIGxpc3QKLSAg
ICAgIGluIHRoaXMgY2FzZQotCi0gICAgQG5vdGUgV2hlbiB1c2VkIHdpdGhvdXQgcGFyZW50aGVz
ZXMgYXJvdW5kIGFuIGVtcHR5IGluaXRpYWxpemVyIGxpc3QsIEByZWYKLSAgICBiYXNpY19qc29u
KCkgaXMgY2FsbGVkIGluc3RlYWQgb2YgdGhpcyBmdW5jdGlvbiwgeWllbGRpbmcgdGhlIEpTT04g
bnVsbAotICAgIHZhbHVlLgotCi0gICAgQHBhcmFtW2luXSBpbml0ICBpbml0aWFsaXplciBsaXN0
IHdpdGggSlNPTiB2YWx1ZXMKLQotICAgIEBwYXJhbVtpbl0gdHlwZV9kZWR1Y3Rpb24gaW50ZXJu
YWwgcGFyYW1ldGVyOyB3aGVuIHNldCB0byBgdHJ1ZWAsIHRoZSB0eXBlCi0gICAgb2YgdGhlIEpT
T04gdmFsdWUgaXMgZGVkdWN0ZWQgZnJvbSB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBAYSBpbml0OyB3
aGVuIHNldAotICAgIHRvIGBmYWxzZWAsIHRoZSB0eXBlIHByb3ZpZGVkIHZpYSBAYSBtYW51YWxf
dHlwZSBpcyBmb3JjZWQuIFRoaXMgbW9kZSBpcwotICAgIHVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBA
cmVmIGFycmF5KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPikgYW5kCi0gICAgQHJl
ZiBvYmplY3Qoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KS4KLQotICAgIEBwYXJh
bVtpbl0gbWFudWFsX3R5cGUgaW50ZXJuYWwgcGFyYW1ldGVyOyB3aGVuIEBhIHR5cGVfZGVkdWN0
aW9uIGlzIHNldAotICAgIHRvIGBmYWxzZWAsIHRoZSBjcmVhdGVkIEpTT04gdmFsdWUgd2lsbCB1
c2UgdGhlIHByb3ZpZGVkIHR5cGUgKG9ubHkgQHJlZgotICAgIHZhbHVlX3Q6OmFycmF5IGFuZCBA
cmVmIHZhbHVlX3Q6Om9iamVjdCBhcmUgdmFsaWQpOyB3aGVuIEBhIHR5cGVfZGVkdWN0aW9uCi0g
ICAgaXMgc2V0IHRvIGB0cnVlYCwgdGhpcyBwYXJhbWV0ZXIgaGFzIG5vIGVmZmVjdAotCi0gICAg
QHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEBhIHR5cGVfZGVkdWN0aW9uIGlzIGBmYWxzZWAs
IEBhIG1hbnVhbF90eXBlCi0gICAgaXMgYHZhbHVlX3Q6Om9iamVjdGAsIGJ1dCBAYSBpbml0IGNv
bnRhaW5zIGFuIGVsZW1lbnQgd2hpY2ggaXMgbm90IGEgcGFpcgotICAgIHdob3NlIGZpcnN0IGVs
ZW1lbnQgaXMgYSBzdHJpbmc7IGV4YW1wbGU6IGAiY2Fubm90IGNyZWF0ZSBvYmplY3QgZnJvbQot
ICAgIGluaXRpYWxpemVyIGxpc3QiYAotCi0gICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBz
aXplIG9mIHRoZSBpbml0aWFsaXplciBsaXN0IEBhIGluaXQuCi0KLSAgICBAbGl2ZWV4YW1wbGV7
VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IEpTT04gdmFsdWVzIGFyZSBjcmVhdGVkIGZyb20K
LSAgICBpbml0aWFsaXplciBsaXN0cy4sYmFzaWNfanNvbl9fbGlzdF9pbml0X3R9Ci0KLSAgICBA
c2EgQHJlZiBhcnJheShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4pIC0tIGNyZWF0
ZSBhIEpTT04gYXJyYXkKLSAgICB2YWx1ZSBmcm9tIGFuIGluaXRpYWxpemVyIGxpc3QKLSAgICBA
c2EgQHJlZiBvYmplY3Qoc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+KSAtLSBjcmVh
dGUgYSBKU09OIG9iamVjdAotICAgIHZhbHVlIGZyb20gYW4gaW5pdGlhbGl6ZXIgbGlzdAotCi0g
ICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIGJhc2ljX2pzb24oc3RkOjppbml0
aWFsaXplcl9saXN0PGJhc2ljX2pzb24+IGluaXQsCi0gICAgICAgICAgICAgICBib29sIHR5cGVf
ZGVkdWN0aW9uID0gdHJ1ZSwKLSAgICAgICAgICAgICAgIHZhbHVlX3QgbWFudWFsX3R5cGUgPSB2
YWx1ZV90OjphcnJheSkKLSAgICB7Ci0gICAgICAgIC8vIGNoZWNrIGlmIGVhY2ggZWxlbWVudCBp
cyBhbiBhcnJheSB3aXRoIHR3byBlbGVtZW50cyB3aG9zZSBmaXJzdAotICAgICAgICAvLyBlbGVt
ZW50IGlzIGEgc3RyaW5nCi0gICAgICAgIGJvb2wgaXNfYW5fb2JqZWN0ID0gc3RkOjphbGxfb2Yo
aW5pdC5iZWdpbigpLCBpbml0LmVuZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFtdKGNvbnN0IGJhc2ljX2pzb24gJiBlbGVtZW50KQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gZWxlbWVudC5pc19hcnJheSgpIGFuZCBlbGVtZW50LnNpemUoKSA9PSAy
IGFuZCBlbGVtZW50WzBdLmlzX3N0cmluZygpOwotICAgICAgICB9KTsKLQotICAgICAgICAvLyBh
ZGp1c3QgdHlwZSBpZiB0eXBlIGRlZHVjdGlvbiBpcyBub3Qgd2FudGVkCi0gICAgICAgIGlmIChu
b3QgdHlwZV9kZWR1Y3Rpb24pCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlmIGFycmF5IGlz
IHdhbnRlZCwgZG8gbm90IGNyZWF0ZSBhbiBvYmplY3QgdGhvdWdoIHBvc3NpYmxlCi0gICAgICAg
ICAgICBpZiAobWFudWFsX3R5cGUgPT0gdmFsdWVfdDo6YXJyYXkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgaXNfYW5fb2JqZWN0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIGlmIG9iamVjdCBpcyB3YW50ZWQgYnV0IGltcG9zc2libGUsIHRocm93IGFu
IGV4Y2VwdGlvbgotICAgICAgICAgICAgaWYgKG1hbnVhbF90eXBlID09IHZhbHVlX3Q6Om9iamVj
dCBhbmQgbm90IGlzX2FuX29iamVjdCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBK
U09OX1RIUk9XKHN0ZDo6ZG9tYWluX2Vycm9yKCJjYW5ub3QgY3JlYXRlIG9iamVjdCBmcm9tIGlu
aXRpYWxpemVyIGxpc3QiKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoaXNfYW5fb2JqZWN0KQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyB0aGUgaW5pdGlhbGl6
ZXIgbGlzdCBpcyBhIGxpc3Qgb2YgcGFpcnMgLT4gY3JlYXRlIG9iamVjdAotICAgICAgICAgICAg
bV90eXBlID0gdmFsdWVfdDo6b2JqZWN0OwotICAgICAgICAgICAgbV92YWx1ZSA9IHZhbHVlX3Q6
Om9iamVjdDsKLQotICAgICAgICAgICAgc3RkOjpmb3JfZWFjaChpbml0LmJlZ2luKCksIGluaXQu
ZW5kKCksIFt0aGlzXShjb25zdCBiYXNpY19qc29uICYgZWxlbWVudCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBtX3ZhbHVlLm9iamVjdC0+ZW1wbGFjZSgqKGVsZW1lbnRbMF0ubV92
YWx1ZS5zdHJpbmcpLCBlbGVtZW50WzFdKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgLy8gdGhlIGluaXRpYWxpemVyIGxp
c3QgZGVzY3JpYmVzIGFuIGFycmF5IC0+IGNyZWF0ZSBhcnJheQotICAgICAgICAgICAgbV90eXBl
ID0gdmFsdWVfdDo6YXJyYXk7Ci0gICAgICAgICAgICBtX3ZhbHVlLmFycmF5ID0gY3JlYXRlPGFy
cmF5X3Q+KGluaXQpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOwot
ICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBleHBsaWNpdGx5IGNyZWF0ZSBhbiBhcnJheSBm
cm9tIGFuIGluaXRpYWxpemVyIGxpc3QKLQotICAgIENyZWF0ZXMgYSBKU09OIGFycmF5IHZhbHVl
IGZyb20gYSBnaXZlbiBpbml0aWFsaXplciBsaXN0LiBUaGF0IGlzLCBnaXZlbiBhCi0gICAgbGlz
dCBvZiB2YWx1ZXMgYGEsIGIsIGNgLCBjcmVhdGVzIHRoZSBKU09OIHZhbHVlIGBbYSwgYiwgY11g
LiBJZiB0aGUKLSAgICBpbml0aWFsaXplciBsaXN0IGlzIGVtcHR5LCB0aGUgZW1wdHkgYXJyYXkg
YFtdYCBpcyBjcmVhdGVkLgotCi0gICAgQG5vdGUgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IG5lZWRl
ZCB0byBleHByZXNzIHR3byBlZGdlIGNhc2VzIHRoYXQgY2Fubm90Ci0gICAgYmUgcmVhbGl6ZWQg
d2l0aCB0aGUgaW5pdGlhbGl6ZXIgbGlzdCBjb25zdHJ1Y3RvciAoQHJlZgotICAgIGJhc2ljX2pz
b24oc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+LCBib29sLCB2YWx1ZV90KSkuIFRo
ZXNlIGNhc2VzCi0gICAgYXJlOgotICAgIDEuIGNyZWF0aW5nIGFuIGFycmF5IHdob3NlIGVsZW1l
bnRzIGFyZSBhbGwgcGFpcnMgd2hvc2UgZmlyc3QgZWxlbWVudCBpcyBhCi0gICAgc3RyaW5nIC0t
IGluIHRoaXMgY2FzZSwgdGhlIGluaXRpYWxpemVyIGxpc3QgY29uc3RydWN0b3Igd291bGQgY3Jl
YXRlIGFuCi0gICAgb2JqZWN0LCB0YWtpbmcgdGhlIGZpcnN0IGVsZW1lbnRzIGFzIGtleXMKLSAg
ICAyLiBjcmVhdGluZyBhbiBlbXB0eSBhcnJheSAtLSBwYXNzaW5nIHRoZSBlbXB0eSBpbml0aWFs
aXplciBsaXN0IHRvIHRoZQotICAgIGluaXRpYWxpemVyIGxpc3QgY29uc3RydWN0b3IgeWllbGRz
IGFuIGVtcHR5IG9iamVjdAotCi0gICAgQHBhcmFtW2luXSBpbml0ICBpbml0aWFsaXplciBsaXN0
IHdpdGggSlNPTiB2YWx1ZXMgdG8gY3JlYXRlIGFuIGFycmF5IGZyb20KLSAgICAob3B0aW9uYWwp
Ci0KLSAgICBAcmV0dXJuIEpTT04gYXJyYXkgdmFsdWUKLQotICAgIEBjb21wbGV4aXR5IExpbmVh
ciBpbiB0aGUgc2l6ZSBvZiBAYSBpbml0LgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dp
bmcgY29kZSBzaG93cyBhbiBleGFtcGxlIGZvciB0aGUgYGFycmF5YAotICAgIGZ1bmN0aW9uLixh
cnJheX0KLQotICAgIEBzYSBAcmVmIGJhc2ljX2pzb24oc3RkOjppbml0aWFsaXplcl9saXN0PGJh
c2ljX2pzb24+LCBib29sLCB2YWx1ZV90KSAtLQotICAgIGNyZWF0ZSBhIEpTT04gdmFsdWUgZnJv
bSBhbiBpbml0aWFsaXplciBsaXN0Ci0gICAgQHNhIEByZWYgb2JqZWN0KHN0ZDo6aW5pdGlhbGl6
ZXJfbGlzdDxiYXNpY19qc29uPikgLS0gY3JlYXRlIGEgSlNPTiBvYmplY3QKLSAgICB2YWx1ZSBm
cm9tIGFuIGluaXRpYWxpemVyIGxpc3QKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAg
Ki8KLSAgICBzdGF0aWMgYmFzaWNfanNvbiBhcnJheShzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFz
aWNfanNvbj4gaW5pdCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPigpKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGJhc2lj
X2pzb24oaW5pdCwgZmFsc2UsIHZhbHVlX3Q6OmFycmF5KTsKLSAgICB9Ci0KLSAgICAvKiEKLSAg
ICBAYnJpZWYgZXhwbGljaXRseSBjcmVhdGUgYW4gb2JqZWN0IGZyb20gYW4gaW5pdGlhbGl6ZXIg
bGlzdAotCi0gICAgQ3JlYXRlcyBhIEpTT04gb2JqZWN0IHZhbHVlIGZyb20gYSBnaXZlbiBpbml0
aWFsaXplciBsaXN0LiBUaGUgaW5pdGlhbGl6ZXIKLSAgICBsaXN0cyBlbGVtZW50cyBtdXN0IGJl
IHBhaXJzLCBhbmQgdGhlaXIgZmlyc3QgZWxlbWVudHMgbXVzdCBiZSBzdHJpbmdzLiBJZgotICAg
IHRoZSBpbml0aWFsaXplciBsaXN0IGlzIGVtcHR5LCB0aGUgZW1wdHkgb2JqZWN0IGB7fWAgaXMg
Y3JlYXRlZC4KLQotICAgIEBub3RlIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhZGRlZCBmb3Igc3lt
bWV0cnkgcmVhc29ucy4gSW4gY29udHJhc3QgdG8gdGhlCi0gICAgcmVsYXRlZCBmdW5jdGlvbiBA
cmVmIGFycmF5KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPiksIHRoZXJlIGFyZQot
ICAgIG5vIGNhc2VzIHdoaWNoIGNhbiBvbmx5IGJlIGV4cHJlc3NlZCBieSB0aGlzIGZ1bmN0aW9u
LiBUaGF0IGlzLCBhbnkKLSAgICBpbml0aWFsaXplciBsaXN0IEBhIGluaXQgY2FuIGFsc28gYmUg
cGFzc2VkIHRvIHRoZSBpbml0aWFsaXplciBsaXN0Ci0gICAgY29uc3RydWN0b3IgQHJlZiBiYXNp
Y19qc29uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPiwgYm9vbCwKLSAgICB2YWx1
ZV90KS4KLQotICAgIEBwYXJhbVtpbl0gaW5pdCAgaW5pdGlhbGl6ZXIgbGlzdCB0byBjcmVhdGUg
YW4gb2JqZWN0IGZyb20gKG9wdGlvbmFsKQotCi0gICAgQHJldHVybiBKU09OIG9iamVjdCB2YWx1
ZQotCi0gICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEBhIGluaXQgaXMgbm90IGEgcGFp
ciB3aG9zZSBmaXJzdCBlbGVtZW50cyBhcmUKLSAgICBzdHJpbmdzOyB0aHJvd24gYnkKLSAgICBA
cmVmIGJhc2ljX2pzb24oc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+LCBib29sLCB2
YWx1ZV90KQotCi0gICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBzaXplIG9mIEBhIGluaXQu
Ci0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGFuIGV4YW1wbGUg
Zm9yIHRoZSBgb2JqZWN0YAotICAgIGZ1bmN0aW9uLixvYmplY3R9Ci0KLSAgICBAc2EgQHJlZiBi
YXNpY19qc29uKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPiwgYm9vbCwgdmFsdWVf
dCkgLS0KLSAgICBjcmVhdGUgYSBKU09OIHZhbHVlIGZyb20gYW4gaW5pdGlhbGl6ZXIgbGlzdAot
ICAgIEBzYSBAcmVmIGFycmF5KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxiYXNpY19qc29uPikgLS0g
Y3JlYXRlIGEgSlNPTiBhcnJheQotICAgIHZhbHVlIGZyb20gYW4gaW5pdGlhbGl6ZXIgbGlzdAot
Ci0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIHN0YXRpYyBiYXNpY19qc29u
IG9iamVjdChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj4gaW5pdCA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNv
bj4oKSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiYXNpY19qc29uKGluaXQsIGZhbHNlLCB2YWx1
ZV90OjpvYmplY3QpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBjb25zdHJ1Y3QgYW4g
YXJyYXkgd2l0aCBjb3VudCBjb3BpZXMgb2YgZ2l2ZW4gdmFsdWUKLQotICAgIENvbnN0cnVjdHMg
YSBKU09OIGFycmF5IHZhbHVlIGJ5IGNyZWF0aW5nIEBhIGNudCBjb3BpZXMgb2YgYSBwYXNzZWQg
dmFsdWUuCi0gICAgSW4gY2FzZSBAYSBjbnQgaXMgYDBgLCBhbiBlbXB0eSBhcnJheSBpcyBjcmVh
dGVkLiBBcyBwb3N0Y29uZGl0aW9uLAotICAgIGBzdGQ6OmRpc3RhbmNlKGJlZ2luKCksZW5kKCkp
ID09IGNudGAgaG9sZHMuCi0KLSAgICBAcGFyYW1baW5dIGNudCAgdGhlIG51bWJlciBvZiBKU09O
IGNvcGllcyBvZiBAYSB2YWwgdG8gY3JlYXRlCi0gICAgQHBhcmFtW2luXSB2YWwgIHRoZSBKU09O
IHZhbHVlIHRvIGNvcHkKLQotICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiBAYSBjbnQuCi0KLSAg
ICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGV4YW1wbGVzIGZvciB0aGUg
QHJlZgotICAgIGJhc2ljX2pzb24oc2l6ZV90eXBlXCwgY29uc3QgYmFzaWNfanNvbiYpCi0gICAg
Y29uc3RydWN0b3IuLGJhc2ljX2pzb25fX3NpemVfdHlwZV9iYXNpY19qc29ufQotCi0gICAgQHNp
bmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIGJhc2ljX2pzb24oc2l6ZV90eXBlIGNudCwg
Y29uc3QgYmFzaWNfanNvbiYgdmFsKQotICAgICAgICA6IG1fdHlwZSh2YWx1ZV90OjphcnJheSkK
LSAgICB7Ci0gICAgICAgIG1fdmFsdWUuYXJyYXkgPSBjcmVhdGU8YXJyYXlfdD4oY250LCB2YWwp
OwotICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJy
aWVmIGNvbnN0cnVjdCBhIEpTT04gY29udGFpbmVyIGdpdmVuIGFuIGl0ZXJhdG9yIHJhbmdlCi0K
LSAgICBDb25zdHJ1Y3RzIHRoZSBKU09OIHZhbHVlIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBy
YW5nZSBgW2ZpcnN0LCBsYXN0KWAuCi0gICAgVGhlIHNlbWFudGljcyBkZXBlbmRzIG9uIHRoZSBk
aWZmZXJlbnQgdHlwZXMgYSBKU09OIHZhbHVlIGNhbiBoYXZlOgotICAgIC0gSW4gY2FzZSBvZiBw
cmltaXRpdmUgdHlwZXMgKG51bWJlciwgYm9vbGVhbiwgb3Igc3RyaW5nKSwgQGEgZmlyc3QgbXVz
dAotICAgICAgYmUgYGJlZ2luKClgIGFuZCBAYSBsYXN0IG11c3QgYmUgYGVuZCgpYC4gSW4gdGhp
cyBjYXNlLCB0aGUgdmFsdWUgaXMKLSAgICAgIGNvcGllZC4gT3RoZXJ3aXNlLCBzdGQ6Om91dF9v
Zl9yYW5nZSBpcyB0aHJvd24uCi0gICAgLSBJbiBjYXNlIG9mIHN0cnVjdHVyZWQgdHlwZXMgKGFy
cmF5LCBvYmplY3QpLCB0aGUgY29uc3RydWN0b3IgYmVoYXZlcyBhcwotICAgICAgc2ltaWxhciB2
ZXJzaW9ucyBmb3IgYHN0ZDo6dmVjdG9yYC4KLSAgICAtIEluIGNhc2Ugb2YgYSBudWxsIHR5cGUs
IHN0ZDo6ZG9tYWluX2Vycm9yIGlzIHRocm93bi4KLQotICAgIEB0cGFyYW0gSW5wdXRJVCBhbiBp
bnB1dCBpdGVyYXRvciB0eXBlIChAcmVmIGl0ZXJhdG9yIG9yIEByZWYKLSAgICBjb25zdF9pdGVy
YXRvcikKLQotICAgIEBwYXJhbVtpbl0gZmlyc3QgYmVnaW4gb2YgdGhlIHJhbmdlIHRvIGNvcHkg
ZnJvbSAoaW5jbHVkZWQpCi0gICAgQHBhcmFtW2luXSBsYXN0IGVuZCBvZiB0aGUgcmFuZ2UgdG8g
Y29weSBmcm9tIChleGNsdWRlZCkKLQotICAgIEBwcmUgSXRlcmF0b3JzIEBhIGZpcnN0IGFuZCBA
YSBsYXN0IG11c3QgYmUgaW5pdGlhbGl6ZWQuICoqVGhpcwotICAgICAgICAgcHJlY29uZGl0aW9u
IGlzIGVuZm9yY2VkIHdpdGggYW4gYXNzZXJ0aW9uLioqCi0KLSAgICBAdGhyb3cgc3RkOjpkb21h
aW5fZXJyb3IgaWYgaXRlcmF0b3JzIGFyZSBub3QgY29tcGF0aWJsZTsgdGhhdCBpcywgZG8gbm90
Ci0gICAgYmVsb25nIHRvIHRoZSBzYW1lIEpTT04gdmFsdWU7IGV4YW1wbGU6IGAiaXRlcmF0b3Jz
IGFyZSBub3QgY29tcGF0aWJsZSJgCi0gICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlIGlmIGl0
ZXJhdG9ycyBhcmUgZm9yIGEgcHJpbWl0aXZlIHR5cGUgKG51bWJlciwKLSAgICBib29sZWFuLCBv
ciBzdHJpbmcpIHdoZXJlIGFuIG91dCBvZiByYW5nZSBlcnJvciBjYW4gYmUgZGV0ZWN0ZWQgZWFz
aWx5OwotICAgIGV4YW1wbGU6IGAiaXRlcmF0b3JzIG91dCBvZiByYW5nZSJgCi0gICAgQHRocm93
IHN0ZDo6YmFkX2FsbG9jIGlmIGFsbG9jYXRpb24gZm9yIG9iamVjdCwgYXJyYXksIG9yIHN0cmlu
ZyBmYWlscwotICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBjYWxsZWQgd2l0aCBhIG51
bGwgdmFsdWU7IGV4YW1wbGU6IGAiY2Fubm90Ci0gICAgdXNlIGNvbnN0cnVjdCB3aXRoIGl0ZXJh
dG9ycyBmcm9tIG51bGwiYAotCi0gICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIGRpc3RhbmNlIGJl
dHdlZW4gQGEgZmlyc3QgYW5kIEBhIGxhc3QuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1w
bGUgYmVsb3cgc2hvd3Mgc2V2ZXJhbCB3YXlzIHRvIGNyZWF0ZSBKU09OIHZhbHVlcyBieQotICAg
IHNwZWNpZnlpbmcgYSBzdWJyYW5nZSB3aXRoIGl0ZXJhdG9ycy4sYmFzaWNfanNvbl9fSW5wdXRJ
dF9JbnB1dEl0fQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIHRlbXBs
YXRlPGNsYXNzIElucHV0SVQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICAgICAg
ICAgICBzdGQ6OmlzX3NhbWU8SW5wdXRJVCwgdHlwZW5hbWUgYmFzaWNfanNvbl90OjppdGVyYXRv
cj46OnZhbHVlIG9yCi0gICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxJbnB1dElULCB0eXBl
bmFtZSBiYXNpY19qc29uX3Q6OmNvbnN0X2l0ZXJhdG9yPjo6dmFsdWUsIGludD46OnR5cGUgPSAw
PgotICAgIGJhc2ljX2pzb24oSW5wdXRJVCBmaXJzdCwgSW5wdXRJVCBsYXN0KQotICAgIHsKLSAg
ICAgICAgYXNzZXJ0KGZpcnN0Lm1fb2JqZWN0ICE9IG51bGxwdHIpOwotICAgICAgICBhc3NlcnQo
bGFzdC5tX29iamVjdCAhPSBudWxscHRyKTsKLQotICAgICAgICAvLyBtYWtlIHN1cmUgaXRlcmF0
b3IgZml0cyB0aGUgY3VycmVudCB2YWx1ZQotICAgICAgICBpZiAoZmlyc3QubV9vYmplY3QgIT0g
bGFzdC5tX29iamVjdCkKLSAgICAgICAgewotICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRv
bWFpbl9lcnJvcigiaXRlcmF0b3JzIGFyZSBub3QgY29tcGF0aWJsZSIpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIGNvcHkgdHlwZSBmcm9tIGZpcnN0IGl0ZXJhdG9yCi0gICAgICAgIG1fdHlw
ZSA9IGZpcnN0Lm1fb2JqZWN0LT5tX3R5cGU7Ci0KLSAgICAgICAgLy8gY2hlY2sgaWYgaXRlcmF0
b3IgcmFuZ2UgaXMgY29tcGxldGUgZm9yIHByaW1pdGl2ZSB2YWx1ZXMKLSAgICAgICAgc3dpdGNo
IChtX3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoK
LSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgotICAgICAgICAgICAgY2Fz
ZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVt
YmVyX3Vuc2lnbmVkOgotICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6Ci0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vdCBmaXJzdC5tX2l0LnByaW1pdGl2ZV9pdGVy
YXRvci5pc19iZWdpbigpIG9yIG5vdCBsYXN0Lm1faXQucHJpbWl0aXZlX2l0ZXJhdG9yLmlzX2Vu
ZCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgSlNPTl9USFJPVyhz
dGQ6Om91dF9vZl9yYW5nZSgiaXRlcmF0b3JzIG91dCBvZiByYW5nZSIpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID0gZmlyc3QubV9vYmpl
Y3QtPm1fdmFsdWUubnVtYmVyX2ludGVnZXI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkID0g
Zmlyc3QubV9vYmplY3QtPm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJl
cl9mbG9hdDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLm51bWJlcl9m
bG9hdCA9IGZpcnN0Lm1fb2JqZWN0LT5tX3ZhbHVlLm51bWJlcl9mbG9hdDsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpi
b29sZWFuOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1fdmFsdWUuYm9vbGVhbiA9
IGZpcnN0Lm1fb2JqZWN0LT5tX3ZhbHVlLmJvb2xlYW47Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1fdmFsdWUgPSAqZmlyc3QubV9vYmplY3QtPm1f
dmFsdWUuc3RyaW5nOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBtX3ZhbHVlLm9iamVjdCA9IGNyZWF0ZTxvYmplY3RfdD4oZmlyc3QubV9pdC5vYmpl
Y3RfaXRlcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxhc3QubV9pdC5vYmplY3RfaXRlcmF0b3IpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1fdmFsdWUuYXJyYXkgPSBjcmVhdGU8YXJyYXlf
dD4oZmlyc3QubV9pdC5hcnJheV9pdGVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxhc3QubV9pdC5hcnJheV9pdGVyYXRvcik7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJv
cigiY2Fubm90IHVzZSBjb25zdHJ1Y3Qgd2l0aCBpdGVyYXRvcnMgZnJvbSAiICsgZmlyc3QubV9v
YmplY3QtPnR5cGVfbmFtZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBhc3NlcnRfaW52YXJpYW50KCk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIGNvbnN0
cnVjdCBhIEpTT04gdmFsdWUgZ2l2ZW4gYW4gaW5wdXQgc3RyZWFtCi0KLSAgICBAcGFyYW1baW4s
b3V0XSBpICBzdHJlYW0gdG8gcmVhZCBhIHNlcmlhbGl6ZWQgSlNPTiB2YWx1ZSBmcm9tCi0gICAg
QHBhcmFtW2luXSBjYiBhIHBhcnNlciBjYWxsYmFjayBmdW5jdGlvbiBvZiB0eXBlIEByZWYgcGFy
c2VyX2NhbGxiYWNrX3QKLSAgICB3aGljaCBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIGRlc2VyaWFs
aXphdGlvbiBieSBmaWx0ZXJpbmcgdW53YW50ZWQgdmFsdWVzCi0gICAgKG9wdGlvbmFsKQotCi0g
ICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0LiBUaGUgcGFy
c2VyIGlzIGEgcHJlZGljdGl2ZQotICAgIExMKDEpIHBhcnNlci4gVGhlIGNvbXBsZXhpdHkgY2Fu
IGJlIGhpZ2hlciBpZiB0aGUgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uCi0gICAgQGEgY2IgaGFz
IGEgc3VwZXItbGluZWFyIGNvbXBsZXhpdHkuCi0KLSAgICBAbm90ZSBBIFVURi04IGJ5dGUgb3Jk
ZXIgbWFyayBpcyBzaWxlbnRseSBpZ25vcmVkLgotCi0gICAgQGRlcHJlY2F0ZWQgVGhpcyBjb25z
dHJ1Y3RvciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lvbgotICAg
ICAgMy4wLjAgdG8gdW5pZnkgdGhlIGludGVyZmFjZSBvZiB0aGUgbGlicmFyeS4gRGVzZXJpYWxp
emF0aW9uIHdpbGwgYmUKLSAgICAgIGRvbmUgYnkgc3RyZWFtIG9wZXJhdG9ycyBvciBieSBjYWxs
aW5nIG9uZSBvZiB0aGUgYHBhcnNlYCBmdW5jdGlvbnMsCi0gICAgICBlLmcuIEByZWYgcGFyc2Uo
c3RkOjppc3RyZWFtJiwgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QpLiBUaGF0IGlzLCBjYWxscwot
ICAgICAgbGlrZSBganNvbiBqKGkpO2AgZm9yIGFuIGlucHV0IHN0cmVhbSBAYSBpIG5lZWQgdG8g
YmUgcmVwbGFjZWQgYnkKLSAgICAgIGBqc29uIGogPSBqc29uOjpwYXJzZShpKTtgLiBTZWUgdGhl
IGV4YW1wbGUgYmVsb3cuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgZGVt
b25zdHJhdGVzIGNvbnN0cnVjdGluZyBhIEpTT04gdmFsdWUgZnJvbQotICAgIGEgYHN0ZDo6c3Ry
aW5nc3RyZWFtYCB3aXRoIGFuZCB3aXRob3V0IGNhbGxiYWNrCi0gICAgZnVuY3Rpb24uLGJhc2lj
X2pzb25fX2lzdHJlYW19Ci0KLSAgICBAc2luY2UgdmVyc2lvbiAyLjAuMCwgZGVwcmVjYXRlZCBp
biB2ZXJzaW9uIDIuMC4zLCB0byBiZSByZW1vdmVkIGluCi0gICAgICAgICAgIHZlcnNpb24gMy4w
LjAKLSAgICAqLwotICAgIEpTT05fREVQUkVDQVRFRAotICAgIGV4cGxpY2l0IGJhc2ljX2pzb24o
c3RkOjppc3RyZWFtJiBpLCBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCBjYiA9IG51bGxwdHIpCi0g
ICAgewotICAgICAgICAqdGhpcyA9IHBhcnNlcihpLCBjYikucGFyc2UoKTsKLSAgICAgICAgYXNz
ZXJ0X2ludmFyaWFudCgpOwotICAgIH0KLQotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwotICAgIC8vIG90aGVyIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvciAv
LwotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0gICAgLyoh
Ci0gICAgQGJyaWVmIGNvcHkgY29uc3RydWN0b3IKLQotICAgIENyZWF0ZXMgYSBjb3B5IG9mIGEg
Z2l2ZW4gSlNPTiB2YWx1ZS4KLQotICAgIEBwYXJhbVtpbl0gb3RoZXIgIHRoZSBKU09OIHZhbHVl
IHRvIGNvcHkKLQotICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSBvZiBAYSBvdGhl
ci4KLQotICAgIEByZXF1aXJlbWVudCBUaGlzIGZ1bmN0aW9uIGhlbHBzIGBiYXNpY19qc29uYCBz
YXRpc2Z5aW5nIHRoZQotICAgIFtDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29t
L3cvY3BwL2NvbmNlcHQvQ29udGFpbmVyKQotICAgIHJlcXVpcmVtZW50czoKLSAgICAtIFRoZSBj
b21wbGV4aXR5IGlzIGxpbmVhci4KLSAgICAtIEFzIHBvc3Rjb25kaXRpb24sIGl0IGhvbGRzOiBg
b3RoZXIgPT0gYmFzaWNfanNvbihvdGhlcilgLgotCi0gICAgQHRocm93IHN0ZDo6YmFkX2FsbG9j
IGlmIGFsbG9jYXRpb24gZm9yIG9iamVjdCwgYXJyYXksIG9yIHN0cmluZyBmYWlscy4KLQotICAg
IEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgdGhl
IGNvcHkKLSAgICBjb25zdHJ1Y3Rvci4sYmFzaWNfanNvbl9fYmFzaWNfanNvbn0KLQotICAgIEBz
aW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICBiYXNpY19qc29uKGNvbnN0IGJhc2ljX2pz
b24mIG90aGVyKQotICAgICAgICA6IG1fdHlwZShvdGhlci5tX3R5cGUpCi0gICAgewotICAgICAg
ICAvLyBjaGVjayBvZiBwYXNzZWQgdmFsdWUgaXMgdmFsaWQKLSAgICAgICAgb3RoZXIuYXNzZXJ0
X2ludmFyaWFudCgpOwotCi0gICAgICAgIHN3aXRjaCAobV90eXBlKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBtX3ZhbHVlID0gKm90aGVyLm1fdmFsdWUub2JqZWN0OwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5Ogot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1fdmFsdWUgPSAqb3RoZXIubV92YWx1ZS5h
cnJheTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
bV92YWx1ZSA9ICpvdGhlci5tX3ZhbHVlLnN0cmluZzsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpib29sZWFuOgotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBvdGhlci5tX3ZhbHVlLmJvb2xl
YW47Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGNhc2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWUubnVtYmVyX2ludGVnZXI7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6
bnVtYmVyX3Vuc2lnbmVkOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1fdmFsdWUg
PSBvdGhlci5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZDsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfZmxvYXQ6
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZSA9IG90aGVyLm1fdmFsdWUu
bnVtYmVyX2Zsb2F0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgp
OwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBtb3ZlIGNvbnN0cnVjdG9yCi0KLSAgICBN
b3ZlIGNvbnN0cnVjdG9yLiBDb25zdHJ1Y3RzIGEgSlNPTiB2YWx1ZSB3aXRoIHRoZSBjb250ZW50
cyBvZiB0aGUgZ2l2ZW4KLSAgICB2YWx1ZSBAYSBvdGhlciB1c2luZyBtb3ZlIHNlbWFudGljcy4g
SXQgInN0ZWFscyIgdGhlIHJlc291cmNlcyBmcm9tIEBhCi0gICAgb3RoZXIgYW5kIGxlYXZlcyBp
dCBhcyBKU09OIG51bGwgdmFsdWUuCi0KLSAgICBAcGFyYW1baW4sb3V0XSBvdGhlciAgdmFsdWUg
dG8gbW92ZSB0byB0aGlzIG9iamVjdAotCi0gICAgQHBvc3QgQGEgb3RoZXIgaXMgYSBKU09OIG51
bGwgdmFsdWUKLQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgotCi0gICAgQGxpdmVleGFtcGxl
e1RoZSBjb2RlIGJlbG93IHNob3dzIHRoZSBtb3ZlIGNvbnN0cnVjdG9yIGV4cGxpY2l0bHkgY2Fs
bGVkCi0gICAgdmlhIHN0ZDo6bW92ZS4sYmFzaWNfanNvbl9fbW92ZWNvbnN0cnVjdG9yfQotCi0g
ICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIGJhc2ljX2pzb24oYmFzaWNfanNv
biYmIG90aGVyKSBub2V4Y2VwdAotICAgICAgICA6IG1fdHlwZShzdGQ6Om1vdmUob3RoZXIubV90
eXBlKSksCi0gICAgICAgICAgbV92YWx1ZShzdGQ6Om1vdmUob3RoZXIubV92YWx1ZSkpCi0gICAg
ewotICAgICAgICAvLyBjaGVjayB0aGF0IHBhc3NlZCB2YWx1ZSBpcyB2YWxpZAotICAgICAgICBv
dGhlci5hc3NlcnRfaW52YXJpYW50KCk7Ci0KLSAgICAgICAgLy8gaW52YWxpZGF0ZSBwYXlsb2Fk
Ci0gICAgICAgIG90aGVyLm1fdHlwZSA9IHZhbHVlX3Q6Om51bGw7Ci0gICAgICAgIG90aGVyLm1f
dmFsdWUgPSB7fTsKLQotICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7Ci0gICAgfQotCi0gICAg
LyohCi0gICAgQGJyaWVmIGNvcHkgYXNzaWdubWVudAotCi0gICAgQ29weSBhc3NpZ25tZW50IG9w
ZXJhdG9yLiBDb3BpZXMgYSBKU09OIHZhbHVlIHZpYSB0aGUgImNvcHkgYW5kIHN3YXAiCi0gICAg
c3RyYXRlZ3k6IEl0IGlzIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZiB0aGUgY29weSBjb25zdHJ1Y3Rv
ciwgZGVzdHJ1Y3RvciwKLSAgICBhbmQgdGhlIHN3YXAoKSBtZW1iZXIgZnVuY3Rpb24uCi0KLSAg
ICBAcGFyYW1baW5dIG90aGVyICB2YWx1ZSB0byBjb3B5IGZyb20KLQotICAgIEBjb21wbGV4aXR5
IExpbmVhci4KLQotICAgIEByZXF1aXJlbWVudCBUaGlzIGZ1bmN0aW9uIGhlbHBzIGBiYXNpY19q
c29uYCBzYXRpc2Z5aW5nIHRoZQotICAgIFtDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVu
Y2UuY29tL3cvY3BwL2NvbmNlcHQvQ29udGFpbmVyKQotICAgIHJlcXVpcmVtZW50czoKLSAgICAt
IFRoZSBjb21wbGV4aXR5IGlzIGxpbmVhci4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUgY29kZSBi
ZWxvdyBzaG93cyBhbmQgZXhhbXBsZSBmb3IgdGhlIGNvcHkgYXNzaWdubWVudC4gSXQKLSAgICBj
cmVhdGVzIGEgY29weSBvZiB2YWx1ZSBgYWAgd2hpY2ggaXMgdGhlbiBzd2FwcGVkIHdpdGggYGJg
LiBGaW5hbGx5XCwgdGhlCi0gICAgY29weSBvZiBgYWAgKHdoaWNoIGlzIHRoZSBudWxsIHZhbHVl
IGFmdGVyIHRoZSBzd2FwKSBpcwotICAgIGRlc3Ryb3llZC4sYmFzaWNfanNvbl9fY29weWFzc2ln
bm1lbnR9Ci0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAgcmVmZXJlbmNl
JiBvcGVyYXRvcj0oYmFzaWNfanNvbiBvdGhlcikgbm9leGNlcHQgKAotICAgICAgICBzdGQ6Omlz
X25vdGhyb3dfbW92ZV9jb25zdHJ1Y3RpYmxlPHZhbHVlX3Q+Ojp2YWx1ZSBhbmQKLSAgICAgICAg
c3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTx2YWx1ZV90Pjo6dmFsdWUgYW5kCi0gICAg
ICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8anNvbl92YWx1ZT46OnZhbHVl
IGFuZAotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPGpzb25fdmFsdWU+
Ojp2YWx1ZQotICAgICkKLSAgICB7Ci0gICAgICAgIC8vIGNoZWNrIHRoYXQgcGFzc2VkIHZhbHVl
IGlzIHZhbGlkCi0gICAgICAgIG90aGVyLmFzc2VydF9pbnZhcmlhbnQoKTsKLQotICAgICAgICB1
c2luZyBzdGQ6OnN3YXA7Ci0gICAgICAgIHN3YXAobV90eXBlLCBvdGhlci5tX3R5cGUpOwotICAg
ICAgICBzd2FwKG1fdmFsdWUsIG90aGVyLm1fdmFsdWUpOwotCi0gICAgICAgIGFzc2VydF9pbnZh
cmlhbnQoKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAgIC8qIQotICAgIEBi
cmllZiBkZXN0cnVjdG9yCi0KLSAgICBEZXN0cm95cyB0aGUgSlNPTiB2YWx1ZSBhbmQgZnJlZXMg
YWxsIGFsbG9jYXRlZCBtZW1vcnkuCi0KLSAgICBAY29tcGxleGl0eSBMaW5lYXIuCi0KLSAgICBA
cmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNmeWluZyB0
aGUKLSAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25j
ZXB0L0NvbnRhaW5lcikKLSAgICByZXF1aXJlbWVudHM6Ci0gICAgLSBUaGUgY29tcGxleGl0eSBp
cyBsaW5lYXIuCi0gICAgLSBBbGwgc3RvcmVkIGVsZW1lbnRzIGFyZSBkZXN0cm95ZWQgYW5kIGFs
bCBtZW1vcnkgaXMgZnJlZWQuCi0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0g
ICAgfmJhc2ljX2pzb24oKQotICAgIHsKLSAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOwotCi0g
ICAgICAgIHN3aXRjaCAobV90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIHZhbHVl
X3Q6Om9iamVjdDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBbGxvY2F0b3JUeXBl
PG9iamVjdF90PiBhbGxvYzsKLSAgICAgICAgICAgICAgICBhbGxvYy5kZXN0cm95KG1fdmFsdWUu
b2JqZWN0KTsKLSAgICAgICAgICAgICAgICBhbGxvYy5kZWFsbG9jYXRlKG1fdmFsdWUub2JqZWN0
LCAxKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgY2FzZSB2YWx1ZV90OjphcnJheToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBB
bGxvY2F0b3JUeXBlPGFycmF5X3Q+IGFsbG9jOwotICAgICAgICAgICAgICAgIGFsbG9jLmRlc3Ry
b3kobV92YWx1ZS5hcnJheSk7Ci0gICAgICAgICAgICAgICAgYWxsb2MuZGVhbGxvY2F0ZShtX3Zh
bHVlLmFycmF5LCAxKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6Ci0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgQWxsb2NhdG9yVHlwZTxzdHJpbmdfdD4gYWxsb2M7Ci0gICAgICAgICAgICAgICAg
YWxsb2MuZGVzdHJveShtX3ZhbHVlLnN0cmluZyk7Ci0gICAgICAgICAgICAgICAgYWxsb2MuZGVh
bGxvY2F0ZShtX3ZhbHVlLnN0cmluZywgMSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgLy8gYWxsIG90aGVyIHR5cGVzIG5lZWQgbm8gc3BlY2lmaWMgZGVzdHJ1Y3Rvcgot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgLy8vIEB9Ci0KLSAgcHVibGljOgotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0g
ICAgLy8gb2JqZWN0IGluc3BlY3Rpb24gLy8KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwot
Ci0gICAgLy8vIEBuYW1lIG9iamVjdCBpbnNwZWN0aW9uCi0gICAgLy8vIEZ1bmN0aW9ucyB0byBp
bnNwZWN0IHRoZSB0eXBlIG9mIGEgSlNPTiB2YWx1ZS4KLSAgICAvLy8gQHsKLQotICAgIC8qIQot
ICAgIEBicmllZiBzZXJpYWxpemF0aW9uCi0KLSAgICBTZXJpYWxpemF0aW9uIGZ1bmN0aW9uIGZv
ciBKU09OIHZhbHVlcy4gVGhlIGZ1bmN0aW9uIHRyaWVzIHRvIG1pbWljCi0gICAgUHl0aG9uJ3Mg
YGpzb24uZHVtcHMoKWAgZnVuY3Rpb24sIGFuZCBjdXJyZW50bHkgc3VwcG9ydHMgaXRzIEBhIGlu
ZGVudAotICAgIHBhcmFtZXRlci4KLQotICAgIEBwYXJhbVtpbl0gaW5kZW50IElmIGluZGVudCBp
cyBub25uZWdhdGl2ZSwgdGhlbiBhcnJheSBlbGVtZW50cyBhbmQgb2JqZWN0Ci0gICAgbWVtYmVy
cyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVu
dCBsZXZlbCBvZgotICAgIGAwYCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiBgLTFgICh0aGUg
ZGVmYXVsdCkgc2VsZWN0cyB0aGUgbW9zdCBjb21wYWN0Ci0gICAgcmVwcmVzZW50YXRpb24uCi0K
LSAgICBAcmV0dXJuIHN0cmluZyBjb250YWluaW5nIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBK
U09OIHZhbHVlCi0KLSAgICBAY29tcGxleGl0eSBMaW5lYXIuCi0KLSAgICBAbGl2ZWV4YW1wbGV7
VGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIHRoZSBlZmZlY3Qgb2YgZGlmZmVyZW50IEBhIGlu
ZGVudAotICAgIHBhcmFtZXRlcnMgdG8gdGhlIHJlc3VsdCBvZiB0aGUgc2VyaWFsaXphdGlvbi4s
ZHVtcH0KLQotICAgIEBzZWUgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi9saWJyYXJ5L2pzb24u
aHRtbCNqc29uLmR1bXAKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICBz
dHJpbmdfdCBkdW1wKGNvbnN0IGludCBpbmRlbnQgPSAtMSkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHN0ZDo6c3RyaW5nc3RyZWFtIHNzOwotCi0gICAgICAgIGlmIChpbmRlbnQgPj0gMCkKLSAgICAg
ICAgewotICAgICAgICAgICAgZHVtcChzcywgdHJ1ZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
PihpbmRlbnQpKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIGR1bXAoc3MsIGZhbHNlLCAwKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBzcy5z
dHIoKTsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgcmV0dXJuIHRoZSB0eXBlIG9mIHRo
ZSBKU09OIHZhbHVlIChleHBsaWNpdCkKLQotICAgIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgSlNP
TiB2YWx1ZSBhcyBhIHZhbHVlIGZyb20gdGhlIEByZWYgdmFsdWVfdAotICAgIGVudW1lcmF0aW9u
LgotCi0gICAgQHJldHVybiB0aGUgdHlwZSBvZiB0aGUgSlNPTiB2YWx1ZQotCi0gICAgQGNvbXBs
ZXhpdHkgQ29uc3RhbnQuCi0KLSAgICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93IGd1YXJhbnRl
ZTogdGhpcyBtZW1iZXIgZnVuY3Rpb24gbmV2ZXIgdGhyb3dzCi0gICAgZXhjZXB0aW9ucy4KLQot
ICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgZXhlbXBsaWZpZXMgYHR5cGUoKWAg
Zm9yIGFsbCBKU09OCi0gICAgdHlwZXMuLHR5cGV9Ci0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAu
MAotICAgICovCi0gICAgY29uc3RleHByIHZhbHVlX3QgdHlwZSgpIGNvbnN0IG5vZXhjZXB0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV90eXBlOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmll
ZiByZXR1cm4gd2hldGhlciB0eXBlIGlzIHByaW1pdGl2ZQotCi0gICAgVGhpcyBmdW5jdGlvbiBy
ZXR1cm5zIHRydWUgaWZmIHRoZSBKU09OIHR5cGUgaXMgcHJpbWl0aXZlIChzdHJpbmcsIG51bWJl
ciwKLSAgICBib29sZWFuLCBvciBudWxsKS4KLQotICAgIEByZXR1cm4gYHRydWVgIGlmIHR5cGUg
aXMgcHJpbWl0aXZlIChzdHJpbmcsIG51bWJlciwgYm9vbGVhbiwgb3IgbnVsbCksCi0gICAgYGZh
bHNlYCBvdGhlcndpc2UuCi0KLSAgICBAY29tcGxleGl0eSBDb25zdGFudC4KLQotICAgIEBleGNl
cHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIG1lbWJlciBmdW5jdGlvbiBuZXZl
ciB0aHJvd3MKLSAgICBleGNlcHRpb25zLgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dp
bmcgY29kZSBleGVtcGxpZmllcyBgaXNfcHJpbWl0aXZlKClgIGZvciBhbGwgSlNPTgotICAgIHR5
cGVzLixpc19wcmltaXRpdmV9Ci0KLSAgICBAc2EgQHJlZiBpc19zdHJ1Y3R1cmVkKCkgLS0gcmV0
dXJucyB3aGV0aGVyIEpTT04gdmFsdWUgaXMgc3RydWN0dXJlZAotICAgIEBzYSBAcmVmIGlzX251
bGwoKSAtLSByZXR1cm5zIHdoZXRoZXIgSlNPTiB2YWx1ZSBpcyBgbnVsbGAKLSAgICBAc2EgQHJl
ZiBpc19zdHJpbmcoKSAtLSByZXR1cm5zIHdoZXRoZXIgSlNPTiB2YWx1ZSBpcyBhIHN0cmluZwot
ICAgIEBzYSBAcmVmIGlzX2Jvb2xlYW4oKSAtLSByZXR1cm5zIHdoZXRoZXIgSlNPTiB2YWx1ZSBp
cyBhIGJvb2xlYW4KLSAgICBAc2EgQHJlZiBpc19udW1iZXIoKSAtLSByZXR1cm5zIHdoZXRoZXIg
SlNPTiB2YWx1ZSBpcyBhIG51bWJlcgotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAq
LwotICAgIGNvbnN0ZXhwciBib29sIGlzX3ByaW1pdGl2ZSgpIGNvbnN0IG5vZXhjZXB0Ci0gICAg
ewotICAgICAgICByZXR1cm4gaXNfbnVsbCgpIG9yIGlzX3N0cmluZygpIG9yIGlzX2Jvb2xlYW4o
KSBvciBpc19udW1iZXIoKTsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgcmV0dXJuIHdo
ZXRoZXIgdHlwZSBpcyBzdHJ1Y3R1cmVkCi0KLSAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1
ZSBpZmYgdGhlIEpTT04gdHlwZSBpcyBzdHJ1Y3R1cmVkIChhcnJheSBvcgotICAgIG9iamVjdCku
Ci0KLSAgICBAcmV0dXJuIGB0cnVlYCBpZiB0eXBlIGlzIHN0cnVjdHVyZWQgKGFycmF5IG9yIG9i
amVjdCksIGBmYWxzZWAgb3RoZXJ3aXNlLgotCi0gICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCi0K
LSAgICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVu
Y3Rpb24gbmV2ZXIgdGhyb3dzCi0gICAgZXhjZXB0aW9ucy4KLQotICAgIEBsaXZlZXhhbXBsZXtU
aGUgZm9sbG93aW5nIGNvZGUgZXhlbXBsaWZpZXMgYGlzX3N0cnVjdHVyZWQoKWAgZm9yIGFsbCBK
U09OCi0gICAgdHlwZXMuLGlzX3N0cnVjdHVyZWR9Ci0KLSAgICBAc2EgQHJlZiBpc19wcmltaXRp
dmUoKSAtLSByZXR1cm5zIHdoZXRoZXIgdmFsdWUgaXMgcHJpbWl0aXZlCi0gICAgQHNhIEByZWYg
aXNfYXJyYXkoKSAtLSByZXR1cm5zIHdoZXRoZXIgdmFsdWUgaXMgYW4gYXJyYXkKLSAgICBAc2Eg
QHJlZiBpc19vYmplY3QoKSAtLSByZXR1cm5zIHdoZXRoZXIgdmFsdWUgaXMgYW4gb2JqZWN0Ci0K
LSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAgY29uc3RleHByIGJvb2wgaXNf
c3RydWN0dXJlZCgpIGNvbnN0IG5vZXhjZXB0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNfYXJy
YXkoKSBvciBpc19vYmplY3QoKTsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgcmV0dXJu
IHdoZXRoZXIgdmFsdWUgaXMgbnVsbAotCi0gICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUg
aWZmIHRoZSBKU09OIHZhbHVlIGlzIG51bGwuCi0KLSAgICBAcmV0dXJuIGB0cnVlYCBpZiB0eXBl
IGlzIG51bGwsIGBmYWxzZWAgb3RoZXJ3aXNlLgotCi0gICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQu
Ci0KLSAgICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIg
ZnVuY3Rpb24gbmV2ZXIgdGhyb3dzCi0gICAgZXhjZXB0aW9ucy4KLQotICAgIEBsaXZlZXhhbXBs
ZXtUaGUgZm9sbG93aW5nIGNvZGUgZXhlbXBsaWZpZXMgYGlzX251bGwoKWAgZm9yIGFsbCBKU09O
Ci0gICAgdHlwZXMuLGlzX251bGx9Ci0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICov
Ci0gICAgY29uc3RleHByIGJvb2wgaXNfbnVsbCgpIGNvbnN0IG5vZXhjZXB0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6Om51bGw7Ci0gICAgfQotCi0gICAgLyohCi0g
ICAgQGJyaWVmIHJldHVybiB3aGV0aGVyIHZhbHVlIGlzIGEgYm9vbGVhbgotCi0gICAgVGhpcyBm
dW5jdGlvbiByZXR1cm5zIHRydWUgaWZmIHRoZSBKU09OIHZhbHVlIGlzIGEgYm9vbGVhbi4KLQot
ICAgIEByZXR1cm4gYHRydWVgIGlmIHR5cGUgaXMgYm9vbGVhbiwgYGZhbHNlYCBvdGhlcndpc2Uu
Ci0KLSAgICBAY29tcGxleGl0eSBDb25zdGFudC4KLQotICAgIEBleGNlcHRpb25zYWZldHkgTm8t
dGhyb3cgZ3VhcmFudGVlOiB0aGlzIG1lbWJlciBmdW5jdGlvbiBuZXZlciB0aHJvd3MKLSAgICBl
eGNlcHRpb25zLgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBleGVtcGxp
ZmllcyBgaXNfYm9vbGVhbigpYCBmb3IgYWxsIEpTT04KLSAgICB0eXBlcy4saXNfYm9vbGVhbn0K
LQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICBjb25zdGV4cHIgYm9vbCBp
c19ib29sZWFuKCkgY29uc3Qgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUg
PT0gdmFsdWVfdDo6Ym9vbGVhbjsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgcmV0dXJu
IHdoZXRoZXIgdmFsdWUgaXMgYSBudW1iZXIKLQotICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0
cnVlIGlmZiB0aGUgSlNPTiB2YWx1ZSBpcyBhIG51bWJlci4gVGhpcyBpbmNsdWRlcwotICAgIGJv
dGggaW50ZWdlciBhbmQgZmxvYXRpbmctcG9pbnQgdmFsdWVzLgotCi0gICAgQHJldHVybiBgdHJ1
ZWAgaWYgdHlwZSBpcyBudW1iZXIgKHJlZ2FyZGxlc3Mgd2hldGhlciBpbnRlZ2VyLCB1bnNpZ25l
ZAotICAgIGludGVnZXIgb3IgZmxvYXRpbmctdHlwZSksIGBmYWxzZWAgb3RoZXJ3aXNlLgotCi0g
ICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCi0KLSAgICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93
IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVuY3Rpb24gbmV2ZXIgdGhyb3dzCi0gICAgZXhjZXB0
aW9ucy4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgZXhlbXBsaWZpZXMg
YGlzX251bWJlcigpYCBmb3IgYWxsIEpTT04KLSAgICB0eXBlcy4saXNfbnVtYmVyfQotCi0gICAg
QHNhIEByZWYgaXNfbnVtYmVyX2ludGVnZXIoKSAtLSBjaGVjayBpZiB2YWx1ZSBpcyBhbiBpbnRl
Z2VyIG9yIHVuc2lnbmVkCi0gICAgaW50ZWdlciBudW1iZXIKLSAgICBAc2EgQHJlZiBpc19udW1i
ZXJfdW5zaWduZWQoKSAtLSBjaGVjayBpZiB2YWx1ZSBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyCi0g
ICAgbnVtYmVyCi0gICAgQHNhIEByZWYgaXNfbnVtYmVyX2Zsb2F0KCkgLS0gY2hlY2sgaWYgdmFs
dWUgaXMgYSBmbG9hdGluZy1wb2ludCBudW1iZXIKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4w
Ci0gICAgKi8KLSAgICBjb25zdGV4cHIgYm9vbCBpc19udW1iZXIoKSBjb25zdCBub2V4Y2VwdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGlzX251bWJlcl9pbnRlZ2VyKCkgb3IgaXNfbnVtYmVyX2Zs
b2F0KCk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIHJldHVybiB3aGV0aGVyIHZhbHVl
IGlzIGFuIGludGVnZXIgbnVtYmVyCi0KLSAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBp
ZmYgdGhlIEpTT04gdmFsdWUgaXMgYW4gaW50ZWdlciBvciB1bnNpZ25lZAotICAgIGludGVnZXIg
bnVtYmVyLiBUaGlzIGV4Y2x1ZGVzIGZsb2F0aW5nLXBvaW50IHZhbHVlcy4KLQotICAgIEByZXR1
cm4gYHRydWVgIGlmIHR5cGUgaXMgYW4gaW50ZWdlciBvciB1bnNpZ25lZCBpbnRlZ2VyIG51bWJl
ciwgYGZhbHNlYAotICAgIG90aGVyd2lzZS4KLQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50Lgot
Ci0gICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVtYmVyIGZ1
bmN0aW9uIG5ldmVyIHRocm93cwotICAgIGV4Y2VwdGlvbnMuCi0KLSAgICBAbGl2ZWV4YW1wbGV7
VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19udW1iZXJfaW50ZWdlcigpYCBmb3Ig
YWxsCi0gICAgSlNPTiB0eXBlcy4saXNfbnVtYmVyX2ludGVnZXJ9Ci0KLSAgICBAc2EgQHJlZiBp
c19udW1iZXIoKSAtLSBjaGVjayBpZiB2YWx1ZSBpcyBhIG51bWJlcgotICAgIEBzYSBAcmVmIGlz
X251bWJlcl91bnNpZ25lZCgpIC0tIGNoZWNrIGlmIHZhbHVlIGlzIGFuIHVuc2lnbmVkIGludGVn
ZXIKLSAgICBudW1iZXIKLSAgICBAc2EgQHJlZiBpc19udW1iZXJfZmxvYXQoKSAtLSBjaGVjayBp
ZiB2YWx1ZSBpcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlcgotCi0gICAgQHNpbmNlIHZlcnNpb24g
MS4wLjAKLSAgICAqLwotICAgIGNvbnN0ZXhwciBib29sIGlzX251bWJlcl9pbnRlZ2VyKCkgY29u
c3Qgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgPT0gdmFsdWVfdDo6bnVt
YmVyX2ludGVnZXIgb3IgbV90eXBlID09IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZDsKLSAgICB9
Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgcmV0dXJuIHdoZXRoZXIgdmFsdWUgaXMgYW4gdW5zaWdu
ZWQgaW50ZWdlciBudW1iZXIKLQotICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmZiB0
aGUgSlNPTiB2YWx1ZSBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyCi0gICAgbnVtYmVyLiBUaGlzIGV4
Y2x1ZGVzIGZsb2F0aW5nLXBvaW50IGFuZCAoc2lnbmVkKSBpbnRlZ2VyIHZhbHVlcy4KLQotICAg
IEByZXR1cm4gYHRydWVgIGlmIHR5cGUgaXMgYW4gdW5zaWduZWQgaW50ZWdlciBudW1iZXIsIGBm
YWxzZWAgb3RoZXJ3aXNlLgotCi0gICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCi0KLSAgICBAZXhj
ZXB0aW9uc2FmZXR5IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIgZnVuY3Rpb24gbmV2
ZXIgdGhyb3dzCi0gICAgZXhjZXB0aW9ucy4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93
aW5nIGNvZGUgZXhlbXBsaWZpZXMgYGlzX251bWJlcl91bnNpZ25lZCgpYCBmb3IgYWxsCi0gICAg
SlNPTiB0eXBlcy4saXNfbnVtYmVyX3Vuc2lnbmVkfQotCi0gICAgQHNhIEByZWYgaXNfbnVtYmVy
KCkgLS0gY2hlY2sgaWYgdmFsdWUgaXMgYSBudW1iZXIKLSAgICBAc2EgQHJlZiBpc19udW1iZXJf
aW50ZWdlcigpIC0tIGNoZWNrIGlmIHZhbHVlIGlzIGFuIGludGVnZXIgb3IgdW5zaWduZWQKLSAg
ICBpbnRlZ2VyIG51bWJlcgotICAgIEBzYSBAcmVmIGlzX251bWJlcl9mbG9hdCgpIC0tIGNoZWNr
IGlmIHZhbHVlIGlzIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyCi0KLSAgICBAc2luY2UgdmVyc2lv
biAyLjAuMAotICAgICovCi0gICAgY29uc3RleHByIGJvb2wgaXNfbnVtYmVyX3Vuc2lnbmVkKCkg
Y29uc3Qgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgPT0gdmFsdWVfdDo6
bnVtYmVyX3Vuc2lnbmVkOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiByZXR1cm4gd2hl
dGhlciB2YWx1ZSBpcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlcgotCi0gICAgVGhpcyBmdW5jdGlv
biByZXR1cm5zIHRydWUgaWZmIHRoZSBKU09OIHZhbHVlIGlzIGEgZmxvYXRpbmctcG9pbnQgbnVt
YmVyLgotICAgIFRoaXMgZXhjbHVkZXMgaW50ZWdlciBhbmQgdW5zaWduZWQgaW50ZWdlciB2YWx1
ZXMuCi0KLSAgICBAcmV0dXJuIGB0cnVlYCBpZiB0eXBlIGlzIGEgZmxvYXRpbmctcG9pbnQgbnVt
YmVyLCBgZmFsc2VgIG90aGVyd2lzZS4KLQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgotCi0g
ICAgQGV4Y2VwdGlvbnNhZmV0eSBOby10aHJvdyBndWFyYW50ZWU6IHRoaXMgbWVtYmVyIGZ1bmN0
aW9uIG5ldmVyIHRocm93cwotICAgIGV4Y2VwdGlvbnMuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhl
IGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGBpc19udW1iZXJfZmxvYXQoKWAgZm9yIGFsbAot
ICAgIEpTT04gdHlwZXMuLGlzX251bWJlcl9mbG9hdH0KLQotICAgIEBzYSBAcmVmIGlzX251bWJl
cigpIC0tIGNoZWNrIGlmIHZhbHVlIGlzIG51bWJlcgotICAgIEBzYSBAcmVmIGlzX251bWJlcl9p
bnRlZ2VyKCkgLS0gY2hlY2sgaWYgdmFsdWUgaXMgYW4gaW50ZWdlciBudW1iZXIKLSAgICBAc2Eg
QHJlZiBpc19udW1iZXJfdW5zaWduZWQoKSAtLSBjaGVjayBpZiB2YWx1ZSBpcyBhbiB1bnNpZ25l
ZCBpbnRlZ2VyCi0gICAgbnVtYmVyCi0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICov
Ci0gICAgY29uc3RleHByIGJvb2wgaXNfbnVtYmVyX2Zsb2F0KCkgY29uc3Qgbm9leGNlcHQKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OwotICAg
IH0KLQotICAgIC8qIQotICAgIEBicmllZiByZXR1cm4gd2hldGhlciB2YWx1ZSBpcyBhbiBvYmpl
Y3QKLQotICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmZiB0aGUgSlNPTiB2YWx1ZSBp
cyBhbiBvYmplY3QuCi0KLSAgICBAcmV0dXJuIGB0cnVlYCBpZiB0eXBlIGlzIG9iamVjdCwgYGZh
bHNlYCBvdGhlcndpc2UuCi0KLSAgICBAY29tcGxleGl0eSBDb25zdGFudC4KLQotICAgIEBleGNl
cHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIG1lbWJlciBmdW5jdGlvbiBuZXZl
ciB0aHJvd3MKLSAgICBleGNlcHRpb25zLgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dp
bmcgY29kZSBleGVtcGxpZmllcyBgaXNfb2JqZWN0KClgIGZvciBhbGwgSlNPTgotICAgIHR5cGVz
Lixpc19vYmplY3R9Ci0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAgY29u
c3RleHByIGJvb2wgaXNfb2JqZWN0KCkgY29uc3Qgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3R5cGUgPT0gdmFsdWVfdDo6b2JqZWN0OwotICAgIH0KLQotICAgIC8qIQotICAgIEBi
cmllZiByZXR1cm4gd2hldGhlciB2YWx1ZSBpcyBhbiBhcnJheQotCi0gICAgVGhpcyBmdW5jdGlv
biByZXR1cm5zIHRydWUgaWZmIHRoZSBKU09OIHZhbHVlIGlzIGFuIGFycmF5LgotCi0gICAgQHJl
dHVybiBgdHJ1ZWAgaWYgdHlwZSBpcyBhcnJheSwgYGZhbHNlYCBvdGhlcndpc2UuCi0KLSAgICBA
Y29tcGxleGl0eSBDb25zdGFudC4KLQotICAgIEBleGNlcHRpb25zYWZldHkgTm8tdGhyb3cgZ3Vh
cmFudGVlOiB0aGlzIG1lbWJlciBmdW5jdGlvbiBuZXZlciB0aHJvd3MKLSAgICBleGNlcHRpb25z
LgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBleGVtcGxpZmllcyBgaXNf
YXJyYXkoKWAgZm9yIGFsbCBKU09OCi0gICAgdHlwZXMuLGlzX2FycmF5fQotCi0gICAgQHNpbmNl
IHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIGNvbnN0ZXhwciBib29sIGlzX2FycmF5KCkgY29u
c3Qgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3R5cGUgPT0gdmFsdWVfdDo6YXJy
YXk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIHJldHVybiB3aGV0aGVyIHZhbHVlIGlz
IGEgc3RyaW5nCi0KLSAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZmYgdGhlIEpTT04g
dmFsdWUgaXMgYSBzdHJpbmcuCi0KLSAgICBAcmV0dXJuIGB0cnVlYCBpZiB0eXBlIGlzIHN0cmlu
ZywgYGZhbHNlYCBvdGhlcndpc2UuCi0KLSAgICBAY29tcGxleGl0eSBDb25zdGFudC4KLQotICAg
IEBleGNlcHRpb25zYWZldHkgTm8tdGhyb3cgZ3VhcmFudGVlOiB0aGlzIG1lbWJlciBmdW5jdGlv
biBuZXZlciB0aHJvd3MKLSAgICBleGNlcHRpb25zLgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBm
b2xsb3dpbmcgY29kZSBleGVtcGxpZmllcyBgaXNfc3RyaW5nKClgIGZvciBhbGwgSlNPTgotICAg
IHR5cGVzLixpc19zdHJpbmd9Ci0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0g
ICAgY29uc3RleHByIGJvb2wgaXNfc3RyaW5nKCkgY29uc3Qgbm9leGNlcHQKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3R5cGUgPT0gdmFsdWVfdDo6c3RyaW5nOwotICAgIH0KLQotICAgIC8qIQot
ICAgIEBicmllZiByZXR1cm4gd2hldGhlciB2YWx1ZSBpcyBkaXNjYXJkZWQKLQotICAgIFRoaXMg
ZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmZiB0aGUgSlNPTiB2YWx1ZSB3YXMgZGlzY2FyZGVkIGR1
cmluZyBwYXJzaW5nCi0gICAgd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uIChzZWUgQHJlZiBwYXJz
ZXJfY2FsbGJhY2tfdCkuCi0KLSAgICBAbm90ZSBUaGlzIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIGJl
IGBmYWxzZWAgZm9yIEpTT04gdmFsdWVzIGFmdGVyIHBhcnNpbmcuCi0gICAgVGhhdCBpcywgZGlz
Y2FyZGVkIHZhbHVlcyBjYW4gb25seSBvY2N1ciBkdXJpbmcgcGFyc2luZywgYnV0IHdpbGwgYmUK
LSAgICByZW1vdmVkIHdoZW4gaW5zaWRlIGEgc3RydWN0dXJlZCB2YWx1ZSBvciByZXBsYWNlZCBi
eSBudWxsIGluIG90aGVyIGNhc2VzLgotCi0gICAgQHJldHVybiBgdHJ1ZWAgaWYgdHlwZSBpcyBk
aXNjYXJkZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLgotCi0gICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQu
Ci0KLSAgICBAZXhjZXB0aW9uc2FmZXR5IE5vLXRocm93IGd1YXJhbnRlZTogdGhpcyBtZW1iZXIg
ZnVuY3Rpb24gbmV2ZXIgdGhyb3dzCi0gICAgZXhjZXB0aW9ucy4KLQotICAgIEBsaXZlZXhhbXBs
ZXtUaGUgZm9sbG93aW5nIGNvZGUgZXhlbXBsaWZpZXMgYGlzX2Rpc2NhcmRlZCgpYCBmb3IgYWxs
IEpTT04KLSAgICB0eXBlcy4saXNfZGlzY2FyZGVkfQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4w
LjAKLSAgICAqLwotICAgIGNvbnN0ZXhwciBib29sIGlzX2Rpc2NhcmRlZCgpIGNvbnN0IG5vZXhj
ZXB0Ci0gICAgewotICAgICAgICByZXR1cm4gbV90eXBlID09IHZhbHVlX3Q6OmRpc2NhcmRlZDsK
LSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgcmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBKU09O
IHZhbHVlIChpbXBsaWNpdCkKLQotICAgIEltcGxpY2l0bHkgcmV0dXJuIHRoZSB0eXBlIG9mIHRo
ZSBKU09OIHZhbHVlIGFzIGEgdmFsdWUgZnJvbSB0aGUgQHJlZgotICAgIHZhbHVlX3QgZW51bWVy
YXRpb24uCi0KLSAgICBAcmV0dXJuIHRoZSB0eXBlIG9mIHRoZSBKU09OIHZhbHVlCi0KLSAgICBA
Y29tcGxleGl0eSBDb25zdGFudC4KLQotICAgIEBleGNlcHRpb25zYWZldHkgTm8tdGhyb3cgZ3Vh
cmFudGVlOiB0aGlzIG1lbWJlciBmdW5jdGlvbiBuZXZlciB0aHJvd3MKLSAgICBleGNlcHRpb25z
LgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBleGVtcGxpZmllcyB0aGUg
QHJlZiB2YWx1ZV90IG9wZXJhdG9yIGZvcgotICAgIGFsbCBKU09OIHR5cGVzLixvcGVyYXRvcl9f
dmFsdWVfdH0KLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICBjb25zdGV4
cHIgb3BlcmF0b3IgdmFsdWVfdCgpIGNvbnN0IG5vZXhjZXB0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV90eXBlOwotICAgIH0KLQotICAgIC8vLyBAfQotCi0gIHByaXZhdGU6Ci0gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vCi0gICAgLy8gdmFsdWUgYWNjZXNzIC8vCi0gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vCi0KLSAgICAvLy8gZ2V0IGEgYm9vbGVhbiAoZXhwbGljaXQpCi0gICAgYm9vbGVhbl90IGdl
dF9pbXBsKGJvb2xlYW5fdCogLyp1bnVzZWQqLykgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChp
c19ib29sZWFuKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLmJvb2xl
YW47Ci0gICAgICAgIH0KLQotICAgICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9tYWluX2Vycm9yKCJ0
eXBlIG11c3QgYmUgYm9vbGVhbiwgYnV0IGlzICIgKyB0eXBlX25hbWUoKSkpOwotICAgIH0KLQot
ICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAob2JqZWN0KQotICAgIG9iamVjdF90
KiBnZXRfaW1wbF9wdHIob2JqZWN0X3QqIC8qdW51c2VkKi8pIG5vZXhjZXB0Ci0gICAgewotICAg
ICAgICByZXR1cm4gaXNfb2JqZWN0KCkgPyBtX3ZhbHVlLm9iamVjdCA6IG51bGxwdHI7Ci0gICAg
fQotCi0gICAgLy8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIChvYmplY3QpCi0gICAgY29u
c3RleHByIGNvbnN0IG9iamVjdF90KiBnZXRfaW1wbF9wdHIoY29uc3Qgb2JqZWN0X3QqIC8qdW51
c2VkKi8pIGNvbnN0IG5vZXhjZXB0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNfb2JqZWN0KCkg
PyBtX3ZhbHVlLm9iamVjdCA6IG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8vIGdldCBhIHBvaW50
ZXIgdG8gdGhlIHZhbHVlIChhcnJheSkKLSAgICBhcnJheV90KiBnZXRfaW1wbF9wdHIoYXJyYXlf
dCogLyp1bnVzZWQqLykgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc19hcnJheSgp
ID8gbV92YWx1ZS5hcnJheSA6IG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8vIGdldCBhIHBvaW50
ZXIgdG8gdGhlIHZhbHVlIChhcnJheSkKLSAgICBjb25zdGV4cHIgY29uc3QgYXJyYXlfdCogZ2V0
X2ltcGxfcHRyKGNvbnN0IGFycmF5X3QqIC8qdW51c2VkKi8pIGNvbnN0IG5vZXhjZXB0Ci0gICAg
ewotICAgICAgICByZXR1cm4gaXNfYXJyYXkoKSA/IG1fdmFsdWUuYXJyYXkgOiBudWxscHRyOwot
ICAgIH0KLQotICAgIC8vLyBnZXQgYSBwb2ludGVyIHRvIHRoZSB2YWx1ZSAoc3RyaW5nKQotICAg
IHN0cmluZ190KiBnZXRfaW1wbF9wdHIoc3RyaW5nX3QqIC8qdW51c2VkKi8pIG5vZXhjZXB0Ci0g
ICAgewotICAgICAgICByZXR1cm4gaXNfc3RyaW5nKCkgPyBtX3ZhbHVlLnN0cmluZyA6IG51bGxw
dHI7Ci0gICAgfQotCi0gICAgLy8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIChzdHJpbmcp
Ci0gICAgY29uc3RleHByIGNvbnN0IHN0cmluZ190KiBnZXRfaW1wbF9wdHIoY29uc3Qgc3RyaW5n
X3QqIC8qdW51c2VkKi8pIGNvbnN0IG5vZXhjZXB0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNf
c3RyaW5nKCkgPyBtX3ZhbHVlLnN0cmluZyA6IG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8vIGdl
dCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIChib29sZWFuKQotICAgIGJvb2xlYW5fdCogZ2V0X2lt
cGxfcHRyKGJvb2xlYW5fdCogLyp1bnVzZWQqLykgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBpc19ib29sZWFuKCkgPyAmbV92YWx1ZS5ib29sZWFuIDogbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICAvLy8gZ2V0IGEgcG9pbnRlciB0byB0aGUgdmFsdWUgKGJvb2xlYW4pCi0gICAgY29uc3Rl
eHByIGNvbnN0IGJvb2xlYW5fdCogZ2V0X2ltcGxfcHRyKGNvbnN0IGJvb2xlYW5fdCogLyp1bnVz
ZWQqLykgY29uc3Qgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc19ib29sZWFuKCkg
PyAmbV92YWx1ZS5ib29sZWFuIDogbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLy8gZ2V0IGEgcG9p
bnRlciB0byB0aGUgdmFsdWUgKGludGVnZXIgbnVtYmVyKQotICAgIG51bWJlcl9pbnRlZ2VyX3Qq
IGdldF9pbXBsX3B0cihudW1iZXJfaW50ZWdlcl90KiAvKnVudXNlZCovKSBub2V4Y2VwdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGlzX251bWJlcl9pbnRlZ2VyKCkgPyAmbV92YWx1ZS5udW1iZXJf
aW50ZWdlciA6IG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8vIGdldCBhIHBvaW50ZXIgdG8gdGhl
IHZhbHVlIChpbnRlZ2VyIG51bWJlcikKLSAgICBjb25zdGV4cHIgY29uc3QgbnVtYmVyX2ludGVn
ZXJfdCogZ2V0X2ltcGxfcHRyKGNvbnN0IG51bWJlcl9pbnRlZ2VyX3QqIC8qdW51c2VkKi8pIGNv
bnN0IG5vZXhjZXB0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNfbnVtYmVyX2ludGVnZXIoKSA/
ICZtX3ZhbHVlLm51bWJlcl9pbnRlZ2VyIDogbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLy8gZ2V0
IGEgcG9pbnRlciB0byB0aGUgdmFsdWUgKHVuc2lnbmVkIG51bWJlcikKLSAgICBudW1iZXJfdW5z
aWduZWRfdCogZ2V0X2ltcGxfcHRyKG51bWJlcl91bnNpZ25lZF90KiAvKnVudXNlZCovKSBub2V4
Y2VwdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzX251bWJlcl91bnNpZ25lZCgpID8gJm1fdmFs
dWUubnVtYmVyX3Vuc2lnbmVkIDogbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLy8gZ2V0IGEgcG9p
bnRlciB0byB0aGUgdmFsdWUgKHVuc2lnbmVkIG51bWJlcikKLSAgICBjb25zdGV4cHIgY29uc3Qg
bnVtYmVyX3Vuc2lnbmVkX3QqIGdldF9pbXBsX3B0cihjb25zdCBudW1iZXJfdW5zaWduZWRfdCog
Lyp1bnVzZWQqLykgY29uc3Qgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc19udW1i
ZXJfdW5zaWduZWQoKSA/ICZtX3ZhbHVlLm51bWJlcl91bnNpZ25lZCA6IG51bGxwdHI7Ci0gICAg
fQotCi0gICAgLy8vIGdldCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIChmbG9hdGluZy1wb2ludCBu
dW1iZXIpCi0gICAgbnVtYmVyX2Zsb2F0X3QqIGdldF9pbXBsX3B0cihudW1iZXJfZmxvYXRfdCog
Lyp1bnVzZWQqLykgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc19udW1iZXJfZmxv
YXQoKSA/ICZtX3ZhbHVlLm51bWJlcl9mbG9hdCA6IG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8v
IGdldCBhIHBvaW50ZXIgdG8gdGhlIHZhbHVlIChmbG9hdGluZy1wb2ludCBudW1iZXIpCi0gICAg
Y29uc3RleHByIGNvbnN0IG51bWJlcl9mbG9hdF90KiBnZXRfaW1wbF9wdHIoY29uc3QgbnVtYmVy
X2Zsb2F0X3QqIC8qdW51c2VkKi8pIGNvbnN0IG5vZXhjZXB0Ci0gICAgewotICAgICAgICByZXR1
cm4gaXNfbnVtYmVyX2Zsb2F0KCkgPyAmbV92YWx1ZS5udW1iZXJfZmxvYXQgOiBudWxscHRyOwot
ICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBoZWxwZXIgZnVuY3Rpb24gdG8gaW1wbGVtZW50
IGdldF9yZWYoKQotCi0gICAgVGhpcyBmdW5jaW9uIGhlbHBzIHRvIGltcGxlbWVudCBnZXRfcmVm
KCkgd2l0aG91dCBjb2RlIGR1cGxpY2F0aW9uIGZvcgotICAgIGNvbnN0IGFuZCBub24tY29uc3Qg
b3ZlcmxvYWRzCi0KLSAgICBAdHBhcmFtIFRoaXNUeXBlIHdpbGwgYmUgZGVkdWNlZCBhcyBgYmFz
aWNfanNvbmAgb3IgYGNvbnN0IGJhc2ljX2pzb25gCi0KLSAgICBAdGhyb3cgc3RkOjpkb21haW5f
ZXJyb3IgaWYgUmVmZXJlbmNlVHlwZSBkb2VzIG5vdCBtYXRjaCB1bmRlcmx5aW5nIHZhbHVlCi0g
ICAgdHlwZSBvZiB0aGUgY3VycmVudCBKU09OCi0gICAgKi8KLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBSZWZlcmVuY2VUeXBlLCB0eXBlbmFtZSBUaGlzVHlwZT4KLSAgICBzdGF0aWMgUmVmZXJlbmNl
VHlwZSBnZXRfcmVmX2ltcGwoVGhpc1R5cGUmIG9iaikKLSAgICB7Ci0gICAgICAgIC8vIGhlbHBl
ciB0eXBlCi0gICAgICAgIHVzaW5nIFBvaW50ZXJUeXBlID0gdHlwZW5hbWUgc3RkOjphZGRfcG9p
bnRlcjxSZWZlcmVuY2VUeXBlPjo6dHlwZTsKLQotICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2Fs
bCB0byBnZXRfcHRyPD4oKQotICAgICAgICBhdXRvIHB0ciA9IG9iai50ZW1wbGF0ZSBnZXRfcHRy
PFBvaW50ZXJUeXBlPigpOwotCi0gICAgICAgIGlmIChwdHIgIT0gbnVsbHB0cikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuICpwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBKU09OX1RI
Uk9XKHN0ZDo6ZG9tYWluX2Vycm9yKCJpbmNvbXBhdGlibGUgUmVmZXJlbmNlVHlwZSBmb3IgZ2V0
X3JlZiwgYWN0dWFsIHR5cGUgaXMgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2JqLnR5cGVfbmFtZSgpKSk7Ci0gICAgfQotCi0gIHB1YmxpYzoKLSAgICAvLy8gQG5h
bWUgdmFsdWUgYWNjZXNzCi0gICAgLy8vIERpcmVjdCBhY2Nlc3MgdG8gdGhlIHN0b3JlZCB2YWx1
ZSBvZiBhIEpTT04gdmFsdWUuCi0gICAgLy8vIEB7Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgZ2V0
IHNwZWNpYWwtY2FzZSBvdmVybG9hZAotCi0gICAgVGhpcyBvdmVybG9hZHMgYXZvaWRzIGEgbG90
IG9mIHRlbXBsYXRlIGJvaWxlcnBsYXRlLCBpdCBjYW4gYmUgc2VlbiBhcyB0aGUKLSAgICBpZGVu
dGl0eSBtZXRob2QKLQotICAgIEB0cGFyYW0gQmFzaWNKc29uVHlwZSA9PSBAcmVmIGJhc2ljX2pz
b24KLQotICAgIEByZXR1cm4gYSBjb3B5IG9mICp0aGlzCi0KLSAgICBAY29tcGxleGl0eSBDb25z
dGFudC4KLQotICAgIEBzaW5jZSB2ZXJzaW9uIDIuMS4wCi0gICAgKi8KLSAgICB0ZW1wbGF0ZSA8
Ci0gICAgICAgIHR5cGVuYW1lIEJhc2ljSnNvblR5cGUsCi0gICAgICAgIGRldGFpbDo6ZW5hYmxl
X2lmX3Q8c3RkOjppc19zYW1lPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX2NvbnN0PEJhc2ljSnNvblR5
cGU+Ojp0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNp
Y19qc29uX3Q+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ+ID0gMCA+
Ci0gICAgYmFzaWNfanNvbiBnZXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICp0aGlz
OwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBnZXQgYSB2YWx1ZSAoZXhwbGljaXQpCi0K
LSAgICBFeHBsaWNpdCB0eXBlIGNvbnZlcnNpb24gYmV0d2VlbiB0aGUgSlNPTiB2YWx1ZSBhbmQg
YSBjb21wYXRpYmxlIHZhbHVlCi0gICAgd2hpY2ggaXMgW0NvcHlDb25zdHJ1Y3RpYmxlXShodHRw
Oi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L0NvcHlDb25zdHJ1Y3RpYmxlKQot
ICAgIGFuZCBbRGVmYXVsdENvbnN0cnVjdGlibGVdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29t
L3cvY3BwL2NvbmNlcHQvRGVmYXVsdENvbnN0cnVjdGlibGUpLgotICAgIFRoZSB2YWx1ZSBpcyBj
b252ZXJ0ZWQgYnkgY2FsbGluZyB0aGUgQHJlZiBqc29uX3NlcmlhbGl6ZXI8VmFsdWVUeXBlPgot
ICAgIGBmcm9tX2pzb24oKWAgbWV0aG9kLgotCi0gICAgVGhlIGZ1bmN0aW9uIGlzIGVxdWl2YWxl
bnQgdG8gZXhlY3V0aW5nCi0gICAgQGNvZGUgey5jcHB9Ci0gICAgVmFsdWVUeXBlIHJldDsKLSAg
ICBKU09OU2VyaWFsaXplcjxWYWx1ZVR5cGU+Ojpmcm9tX2pzb24oKnRoaXMsIHJldCk7Ci0gICAg
cmV0dXJuIHJldDsKLSAgICBAZW5kY29kZQotCi0gICAgVGhpcyBvdmVybG9hZHMgaXMgY2hvc2Vu
IGlmOgotICAgIC0gQGEgVmFsdWVUeXBlIGlzIG5vdCBAcmVmIGJhc2ljX2pzb24sCi0gICAgLSBA
cmVmIGpzb25fc2VyaWFsaXplcjxWYWx1ZVR5cGU+IGhhcyBhIGBmcm9tX2pzb24oKWAgbWV0aG9k
IG9mIHRoZSBmb3JtCi0gICAgICBgdm9pZCBmcm9tX2pzb24oY29uc3QgQHJlZiBiYXNpY19qc29u
JiwgVmFsdWVUeXBlJilgLCBhbmQKLSAgICAtIEByZWYganNvbl9zZXJpYWxpemVyPFZhbHVlVHlw
ZT4gZG9lcyBub3QgaGF2ZSBhIGBmcm9tX2pzb24oKWAgbWV0aG9kIG9mCi0gICAgICB0aGUgZm9y
bSBgVmFsdWVUeXBlIGZyb21fanNvbihjb25zdCBAcmVmIGJhc2ljX2pzb24mKWAKLQotICAgIEB0
cGFyYW0gVmFsdWVUeXBlQ1YgdGhlIHByb3ZpZGVkIHZhbHVlIHR5cGUKLSAgICBAdHBhcmFtIFZh
bHVlVHlwZSB0aGUgcmV0dXJuZWQgdmFsdWUgdHlwZQotCi0gICAgQHJldHVybiBjb3B5IG9mIHRo
ZSBKU09OIHZhbHVlLCBjb252ZXJ0ZWQgdG8gQGEgVmFsdWVUeXBlCi0KLSAgICBAdGhyb3cgd2hh
dCBAcmVmIGpzb25fc2VyaWFsaXplcjxWYWx1ZVR5cGU+IGBmcm9tX2pzb24oKWAgbWV0aG9kIHRo
cm93cwotCi0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIHNldmVyYWwg
Y29udmVyc2lvbnMgZnJvbSBKU09OIHZhbHVlcwotICAgIHRvIG90aGVyIHR5cGVzLiBUaGVyZSBh
IGZldyB0aGluZ3MgdG8gbm90ZTogKDEpIEZsb2F0aW5nLXBvaW50IG51bWJlcnMgY2FuCi0gICAg
YmUgY29udmVydGVkIHRvIGludGVnZXJzXCwgKDIpIEEgSlNPTiBhcnJheSBjYW4gYmUgY29udmVy
dGVkIHRvIGEgc3RhbmRhcmQKLSAgICBgc3RkOjp2ZWN0b3I8c2hvcnQ+YFwsICgzKSBBIEpTT04g
b2JqZWN0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gQysrCi0gICAgYXNzb2NpYXRpdmUgY29udGFpbmVy
cyBzdWNoIGFzIGBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmdcLAotICAgIGpzb24+YC4s
Z2V0X19WYWx1ZVR5cGVfY29uc3R9Ci0KLSAgICBAc2luY2UgdmVyc2lvbiAyLjEuMAotICAgICov
Ci0gICAgdGVtcGxhdGUgPAotICAgICAgICB0eXBlbmFtZSBWYWx1ZVR5cGVDViwKLSAgICAgICAg
dHlwZW5hbWUgVmFsdWVUeXBlID0gZGV0YWlsOjp1bmN2cmVmX3Q8VmFsdWVUeXBlQ1Y+LAotICAg
ICAgICBkZXRhaWw6OmVuYWJsZV9pZl90IDwKLSAgICAgICAgICAgIG5vdCBzdGQ6OmlzX3NhbWU8
YmFzaWNfanNvbl90LCBWYWx1ZVR5cGU+Ojp2YWx1ZSBhbmQKLSAgICAgICAgICAgIGRldGFpbDo6
aGFzX2Zyb21fanNvbjxiYXNpY19qc29uX3QsIFZhbHVlVHlwZT46OnZhbHVlIGFuZAotICAgICAg
ICAgICAgbm90IGRldGFpbDo6aGFzX25vbl9kZWZhdWx0X2Zyb21fanNvbjxiYXNpY19qc29uX3Qs
IFZhbHVlVHlwZT46OnZhbHVlLAotICAgICAgICAgICAgaW50ID4gPSAwID4KLSAgICBWYWx1ZVR5
cGUgZ2V0KCkgY29uc3Qgbm9leGNlcHQobm9leGNlcHQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBKU09OU2VyaWFsaXplcjxWYWx1ZVR5cGU+Ojpmcm9tX2pzb24oc3Rk
OjpkZWNsdmFsPGNvbnN0IGJhc2ljX2pzb25fdCY+KCksIHN0ZDo6ZGVjbHZhbDxWYWx1ZVR5cGUm
PigpKSkpCi0gICAgewotICAgICAgICAvLyB3ZSBjYW5ub3Qgc3RhdGljX2Fzc2VydCBvbiBWYWx1
ZVR5cGVDViBiZWluZyBub24tY29uc3QsIGJlY2F1c2UKLSAgICAgICAgLy8gdGhlcmUgaXMgc3Vw
cG9ydCBmb3IgZ2V0PGNvbnN0IGJhc2ljX2pzb25fdD4oKSwgd2hpY2ggaXMgd2h5IHdlCi0gICAg
ICAgIC8vIHN0aWxsIG5lZWQgdGhlIHVuY3ZyZWYKLSAgICAgICAgc3RhdGljX2Fzc2VydChub3Qg
c3RkOjppc19yZWZlcmVuY2U8VmFsdWVUeXBlQ1Y+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAiZ2V0KCkgY2Fubm90IGJlIHVzZWQgd2l0aCByZWZlcmVuY2UgdHlwZXMsIHlvdSBtaWdo
dCB3YW50IHRvIHVzZSBnZXRfcmVmKCkiKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X2RlZmF1bHRfY29uc3RydWN0aWJsZTxWYWx1ZVR5cGU+Ojp2YWx1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAidHlwZXMgbXVzdCBiZSBEZWZhdWx0Q29uc3RydWN0aWJsZSB3aGVuIHVzZWQgd2l0
aCBnZXQoKSIpOwotCi0gICAgICAgIFZhbHVlVHlwZSByZXQ7Ci0gICAgICAgIEpTT05TZXJpYWxp
emVyPFZhbHVlVHlwZT46OmZyb21fanNvbigqdGhpcywgcmV0KTsKLSAgICAgICAgcmV0dXJuIHJl
dDsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgZ2V0IGEgdmFsdWUgKGV4cGxpY2l0KTsg
c3BlY2lhbCBjYXNlCi0KLSAgICBFeHBsaWNpdCB0eXBlIGNvbnZlcnNpb24gYmV0d2VlbiB0aGUg
SlNPTiB2YWx1ZSBhbmQgYSBjb21wYXRpYmxlIHZhbHVlCi0gICAgd2hpY2ggaXMgKipub3QqKiBb
Q29weUNvbnN0cnVjdGlibGVdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNl
cHQvQ29weUNvbnN0cnVjdGlibGUpCi0gICAgYW5kICoqbm90KiogW0RlZmF1bHRDb25zdHJ1Y3Rp
YmxlXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L0RlZmF1bHRDb25z
dHJ1Y3RpYmxlKS4KLSAgICBUaGUgdmFsdWUgaXMgY29udmVydGVkIGJ5IGNhbGxpbmcgdGhlIEBy
ZWYganNvbl9zZXJpYWxpemVyPFZhbHVlVHlwZT4KLSAgICBgZnJvbV9qc29uKClgIG1ldGhvZC4K
LQotICAgIFRoZSBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGV4ZWN1dGluZwotICAgIEBjb2Rl
IHsuY3BwfQotICAgIHJldHVybiBKU09OU2VyaWFsaXplcjxWYWx1ZVR5cGVDVj46OmZyb21fanNv
bigqdGhpcyk7Ci0gICAgQGVuZGNvZGUKLQotICAgIFRoaXMgb3ZlcmxvYWRzIGlzIGNob3NlbiBp
ZjoKLSAgICAtIEBhIFZhbHVlVHlwZSBpcyBub3QgQHJlZiBiYXNpY19qc29uIGFuZAotICAgIC0g
QHJlZiBqc29uX3NlcmlhbGl6ZXI8VmFsdWVUeXBlPiBoYXMgYSBgZnJvbV9qc29uKClgIG1ldGhv
ZCBvZiB0aGUgZm9ybQotICAgICAgYFZhbHVlVHlwZSBmcm9tX2pzb24oY29uc3QgQHJlZiBiYXNp
Y19qc29uJilgCi0KLSAgICBAbm90ZSBJZiBAcmVmIGpzb25fc2VyaWFsaXplcjxWYWx1ZVR5cGU+
IGhhcyBib3RoIG92ZXJsb2FkcyBvZgotICAgIGBmcm9tX2pzb24oKWAsIHRoaXMgb25lIGlzIGNo
b3Nlbi4KLQotICAgIEB0cGFyYW0gVmFsdWVUeXBlQ1YgdGhlIHByb3ZpZGVkIHZhbHVlIHR5cGUK
LSAgICBAdHBhcmFtIFZhbHVlVHlwZSB0aGUgcmV0dXJuZWQgdmFsdWUgdHlwZQotCi0gICAgQHJl
dHVybiBjb3B5IG9mIHRoZSBKU09OIHZhbHVlLCBjb252ZXJ0ZWQgdG8gQGEgVmFsdWVUeXBlCi0K
LSAgICBAdGhyb3cgd2hhdCBAcmVmIGpzb25fc2VyaWFsaXplcjxWYWx1ZVR5cGU+IGBmcm9tX2pz
b24oKWAgbWV0aG9kIHRocm93cwotCi0gICAgQHNpbmNlIHZlcnNpb24gMi4xLjAKLSAgICAqLwot
ICAgIHRlbXBsYXRlIDwKLSAgICAgICAgdHlwZW5hbWUgVmFsdWVUeXBlQ1YsCi0gICAgICAgIHR5
cGVuYW1lIFZhbHVlVHlwZSA9IGRldGFpbDo6dW5jdnJlZl90PFZhbHVlVHlwZUNWPiwKLSAgICAg
ICAgZGV0YWlsOjplbmFibGVfaWZfdDxub3Qgc3RkOjppc19zYW1lPGJhc2ljX2pzb25fdCwgVmFs
dWVUeXBlPjo6dmFsdWUgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOjpo
YXNfbm9uX2RlZmF1bHRfZnJvbV9qc29uPGJhc2ljX2pzb25fdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZhbHVlVHlwZT46OnZhbHVlLCBpbnQ+ID0gMCA+Ci0gICAgVmFs
dWVUeXBlIGdldCgpIGNvbnN0IG5vZXhjZXB0KG5vZXhjZXB0KAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSlNPTlNlcmlhbGl6ZXI8VmFsdWVUeXBlQ1Y+Ojpmcm9tX2pz
b24oc3RkOjpkZWNsdmFsPGNvbnN0IGJhc2ljX2pzb25fdCY+KCkpKSkKLSAgICB7Ci0gICAgICAg
IHN0YXRpY19hc3NlcnQobm90IHN0ZDo6aXNfcmVmZXJlbmNlPFZhbHVlVHlwZUNWPjo6dmFsdWUs
Ci0gICAgICAgICAgICAgICAgICAgICAgImdldCgpIGNhbm5vdCBiZSB1c2VkIHdpdGggcmVmZXJl
bmNlIHR5cGVzLCB5b3UgbWlnaHQgd2FudCB0byB1c2UgZ2V0X3JlZigpIik7Ci0gICAgICAgIHJl
dHVybiBKU09OU2VyaWFsaXplcjxWYWx1ZVR5cGVDVj46OmZyb21fanNvbigqdGhpcyk7Ci0gICAg
fQotCi0gICAgLyohCi0gICAgQGJyaWVmIGdldCBhIHBvaW50ZXIgdmFsdWUgKGV4cGxpY2l0KQot
Ci0gICAgRXhwbGljaXQgcG9pbnRlciBhY2Nlc3MgdG8gdGhlIGludGVybmFsbHkgc3RvcmVkIEpT
T04gdmFsdWUuIE5vIGNvcGllcyBhcmUKLSAgICBtYWRlLgotCi0gICAgQHdhcm5pbmcgVGhlIHBv
aW50ZXIgYmVjb21lcyBpbnZhbGlkIGlmIHRoZSB1bmRlcmx5aW5nIEpTT04gb2JqZWN0Ci0gICAg
Y2hhbmdlcy4KLQotICAgIEB0cGFyYW0gUG9pbnRlclR5cGUgcG9pbnRlciB0eXBlOyBtdXN0IGJl
IGEgcG9pbnRlciB0byBAcmVmIGFycmF5X3QsIEByZWYKLSAgICBvYmplY3RfdCwgQHJlZiBzdHJp
bmdfdCwgQHJlZiBib29sZWFuX3QsIEByZWYgbnVtYmVyX2ludGVnZXJfdCwKLSAgICBAcmVmIG51
bWJlcl91bnNpZ25lZF90LCBvciBAcmVmIG51bWJlcl9mbG9hdF90LgotCi0gICAgQHJldHVybiBw
b2ludGVyIHRvIHRoZSBpbnRlcm5hbGx5IHN0b3JlZCBKU09OIHZhbHVlIGlmIHRoZSByZXF1ZXN0
ZWQKLSAgICBwb2ludGVyIHR5cGUgQGEgUG9pbnRlclR5cGUgZml0cyB0byB0aGUgSlNPTiB2YWx1
ZTsgYG51bGxwdHJgIG90aGVyd2lzZQotCi0gICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCi0KLSAg
ICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IHBvaW50ZXJzIHRvIGlu
dGVybmFsIHZhbHVlcyBvZiBhCi0gICAgSlNPTiB2YWx1ZSBjYW4gYmUgcmVxdWVzdGVkLiBOb3Rl
IHRoYXQgbm8gdHlwZSBjb252ZXJzaW9ucyBhcmUgbWFkZSBhbmQgYQotICAgIGBudWxscHRyYCBp
cyByZXR1cm5lZCBpZiB0aGUgdmFsdWUgYW5kIHRoZSByZXF1ZXN0ZWQgcG9pbnRlciB0eXBlIGRv
ZXMgbm90Ci0gICAgbWF0Y2guLGdldF9fUG9pbnRlclR5cGV9Ci0KLSAgICBAc2EgQHJlZiBnZXRf
cHRyKCkgZm9yIGV4cGxpY2l0IHBvaW50ZXItbWVtYmVyIGFjY2VzcwotCi0gICAgQHNpbmNlIHZl
cnNpb24gMS4wLjAKLSAgICAqLwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBvaW50ZXJUeXBlLCB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgICAgICAgc3RkOjppc19wb2ludGVy
PFBvaW50ZXJUeXBlPjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgotICAgIFBvaW50ZXJUeXBlIGdl
dCgpIG5vZXhjZXB0Ci0gICAgewotICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2FsbCB0byBnZXRf
cHRyCi0gICAgICAgIHJldHVybiBnZXRfcHRyPFBvaW50ZXJUeXBlPigpOwotICAgIH0KLQotICAg
IC8qIQotICAgIEBicmllZiBnZXQgYSBwb2ludGVyIHZhbHVlIChleHBsaWNpdCkKLSAgICBAY29w
eWRvYyBnZXQoKQotICAgICovCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgUG9pbnRlclR5cGUsIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8
UG9pbnRlclR5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+Ci0gICAgY29uc3RleHByIGNvbnN0
IFBvaW50ZXJUeXBlIGdldCgpIGNvbnN0IG5vZXhjZXB0Ci0gICAgewotICAgICAgICAvLyBkZWxl
Z2F0ZSB0aGUgY2FsbCB0byBnZXRfcHRyCi0gICAgICAgIHJldHVybiBnZXRfcHRyPFBvaW50ZXJU
eXBlPigpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBnZXQgYSBwb2ludGVyIHZhbHVl
IChpbXBsaWNpdCkKLQotICAgIEltcGxpY2l0IHBvaW50ZXIgYWNjZXNzIHRvIHRoZSBpbnRlcm5h
bGx5IHN0b3JlZCBKU09OIHZhbHVlLiBObyBjb3BpZXMgYXJlCi0gICAgbWFkZS4KLQotICAgIEB3
YXJuaW5nIFdyaXRpbmcgZGF0YSB0byB0aGUgcG9pbnRlZSBvZiB0aGUgcmVzdWx0IHlpZWxkcyBh
biB1bmRlZmluZWQKLSAgICBzdGF0ZS4KLQotICAgIEB0cGFyYW0gUG9pbnRlclR5cGUgcG9pbnRl
ciB0eXBlOyBtdXN0IGJlIGEgcG9pbnRlciB0byBAcmVmIGFycmF5X3QsIEByZWYKLSAgICBvYmpl
Y3RfdCwgQHJlZiBzdHJpbmdfdCwgQHJlZiBib29sZWFuX3QsIEByZWYgbnVtYmVyX2ludGVnZXJf
dCwKLSAgICBAcmVmIG51bWJlcl91bnNpZ25lZF90LCBvciBAcmVmIG51bWJlcl9mbG9hdF90LiBF
bmZvcmNlZCBieSBhIHN0YXRpYwotICAgIGFzc2VydGlvbi4KLQotICAgIEByZXR1cm4gcG9pbnRl
ciB0byB0aGUgaW50ZXJuYWxseSBzdG9yZWQgSlNPTiB2YWx1ZSBpZiB0aGUgcmVxdWVzdGVkCi0g
ICAgcG9pbnRlciB0eXBlIEBhIFBvaW50ZXJUeXBlIGZpdHMgdG8gdGhlIEpTT04gdmFsdWU7IGBu
dWxscHRyYCBvdGhlcndpc2UKLQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgotCi0gICAgQGxp
dmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBwb2ludGVycyB0byBpbnRlcm5h
bCB2YWx1ZXMgb2YgYQotICAgIEpTT04gdmFsdWUgY2FuIGJlIHJlcXVlc3RlZC4gTm90ZSB0aGF0
IG5vIHR5cGUgY29udmVyc2lvbnMgYXJlIG1hZGUgYW5kIGEKLSAgICBgbnVsbHB0cmAgaXMgcmV0
dXJuZWQgaWYgdGhlIHZhbHVlIGFuZCB0aGUgcmVxdWVzdGVkIHBvaW50ZXIgdHlwZSBkb2VzIG5v
dAotICAgIG1hdGNoLixnZXRfcHRyfQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAq
LwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBvaW50ZXJUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjwKLSAgICAgICAgICAgICAgICAgc3RkOjppc19wb2ludGVyPFBvaW50ZXJUeXBlPjo6dmFs
dWUsIGludD46OnR5cGUgPSAwPgotICAgIFBvaW50ZXJUeXBlIGdldF9wdHIoKSBub2V4Y2VwdAot
ICAgIHsKLSAgICAgICAgLy8gZ2V0IHRoZSB0eXBlIG9mIHRoZSBQb2ludGVyVHlwZSAocmVtb3Zl
IHBvaW50ZXIgYW5kIGNvbnN0KQotICAgICAgICB1c2luZyBwb2ludGVlX3QgPSB0eXBlbmFtZSBz
dGQ6OnJlbW92ZV9jb25zdDx0eXBlbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
OnJlbW92ZV9wb2ludGVyPHR5cGVuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
cmVtb3ZlX2NvbnN0PFBvaW50ZXJUeXBlPjo6dHlwZT46OnR5cGU+Ojp0eXBlOwotICAgICAgICAv
LyBtYWtlIHN1cmUgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgYWxsb3dlZCB0eXBlcwotICAgICAgICBz
dGF0aWNfYXNzZXJ0KAotICAgICAgICAgICAgc3RkOjppc19zYW1lPG9iamVjdF90LCBwb2ludGVl
X3Q+Ojp2YWx1ZQotICAgICAgICAgICAgb3Igc3RkOjppc19zYW1lPGFycmF5X3QsIHBvaW50ZWVf
dD46OnZhbHVlCi0gICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8c3RyaW5nX3QsIHBvaW50ZWVf
dD46OnZhbHVlCi0gICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8Ym9vbGVhbl90LCBwb2ludGVl
X3Q+Ojp2YWx1ZQotICAgICAgICAgICAgb3Igc3RkOjppc19zYW1lPG51bWJlcl9pbnRlZ2VyX3Qs
IHBvaW50ZWVfdD46OnZhbHVlCi0gICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8bnVtYmVyX3Vu
c2lnbmVkX3QsIHBvaW50ZWVfdD46OnZhbHVlCi0gICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8
bnVtYmVyX2Zsb2F0X3QsIHBvaW50ZWVfdD46OnZhbHVlCi0gICAgICAgICAgICAsICJpbmNvbXBh
dGlibGUgcG9pbnRlciB0eXBlIik7Ci0KLSAgICAgICAgLy8gZGVsZWdhdGUgdGhlIGNhbGwgdG8g
Z2V0X2ltcGxfcHRyPD4oKQotICAgICAgICByZXR1cm4gZ2V0X2ltcGxfcHRyKHN0YXRpY19jYXN0
PFBvaW50ZXJUeXBlPihudWxscHRyKSk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIGdl
dCBhIHBvaW50ZXIgdmFsdWUgKGltcGxpY2l0KQotICAgIEBjb3B5ZG9jIGdldF9wdHIoKQotICAg
ICovCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgUG9pbnRlclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPAotICAgICAgICAgICAgICAgICBzdGQ6OmlzX3BvaW50ZXI8UG9pbnRlclR5cGU+Ojp2
YWx1ZSBhbmQKLSAgICAgICAgICAgICAgICAgc3RkOjppc19jb25zdDx0eXBlbmFtZSBzdGQ6OnJl
bW92ZV9wb2ludGVyPFBvaW50ZXJUeXBlPjo6dHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4K
LSAgICBjb25zdGV4cHIgY29uc3QgUG9pbnRlclR5cGUgZ2V0X3B0cigpIGNvbnN0IG5vZXhjZXB0
Ci0gICAgewotICAgICAgICAvLyBnZXQgdGhlIHR5cGUgb2YgdGhlIFBvaW50ZXJUeXBlIChyZW1v
dmUgcG9pbnRlciBhbmQgY29uc3QpCi0gICAgICAgIHVzaW5nIHBvaW50ZWVfdCA9IHR5cGVuYW1l
IHN0ZDo6cmVtb3ZlX2NvbnN0PHR5cGVuYW1lCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6cmVtb3ZlX3BvaW50ZXI8dHlwZW5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
OjpyZW1vdmVfY29uc3Q8UG9pbnRlclR5cGU+Ojp0eXBlPjo6dHlwZT46OnR5cGU7Ci0gICAgICAg
IC8vIG1ha2Ugc3VyZSB0aGUgdHlwZSBtYXRjaGVzIHRoZSBhbGxvd2VkIHR5cGVzCi0gICAgICAg
IHN0YXRpY19hc3NlcnQoCi0gICAgICAgICAgICBzdGQ6OmlzX3NhbWU8b2JqZWN0X3QsIHBvaW50
ZWVfdD46OnZhbHVlCi0gICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8YXJyYXlfdCwgcG9pbnRl
ZV90Pjo6dmFsdWUKLSAgICAgICAgICAgIG9yIHN0ZDo6aXNfc2FtZTxzdHJpbmdfdCwgcG9pbnRl
ZV90Pjo6dmFsdWUKLSAgICAgICAgICAgIG9yIHN0ZDo6aXNfc2FtZTxib29sZWFuX3QsIHBvaW50
ZWVfdD46OnZhbHVlCi0gICAgICAgICAgICBvciBzdGQ6OmlzX3NhbWU8bnVtYmVyX2ludGVnZXJf
dCwgcG9pbnRlZV90Pjo6dmFsdWUKLSAgICAgICAgICAgIG9yIHN0ZDo6aXNfc2FtZTxudW1iZXJf
dW5zaWduZWRfdCwgcG9pbnRlZV90Pjo6dmFsdWUKLSAgICAgICAgICAgIG9yIHN0ZDo6aXNfc2Ft
ZTxudW1iZXJfZmxvYXRfdCwgcG9pbnRlZV90Pjo6dmFsdWUKLSAgICAgICAgICAgICwgImluY29t
cGF0aWJsZSBwb2ludGVyIHR5cGUiKTsKLQotICAgICAgICAvLyBkZWxlZ2F0ZSB0aGUgY2FsbCB0
byBnZXRfaW1wbF9wdHI8PigpIGNvbnN0Ci0gICAgICAgIHJldHVybiBnZXRfaW1wbF9wdHIoc3Rh
dGljX2Nhc3Q8Y29uc3QgUG9pbnRlclR5cGU+KG51bGxwdHIpKTsKLSAgICB9Ci0KLSAgICAvKiEK
LSAgICBAYnJpZWYgZ2V0IGEgcmVmZXJlbmNlIHZhbHVlIChpbXBsaWNpdCkKLQotICAgIEltcGxp
Y2l0IHJlZmVyZW5jZSBhY2Nlc3MgdG8gdGhlIGludGVybmFsbHkgc3RvcmVkIEpTT04gdmFsdWUu
IE5vIGNvcGllcwotICAgIGFyZSBtYWRlLgotCi0gICAgQHdhcm5pbmcgV3JpdGluZyBkYXRhIHRv
IHRoZSByZWZlcmVlIG9mIHRoZSByZXN1bHQgeWllbGRzIGFuIHVuZGVmaW5lZAotICAgIHN0YXRl
LgotCi0gICAgQHRwYXJhbSBSZWZlcmVuY2VUeXBlIHJlZmVyZW5jZSB0eXBlOyBtdXN0IGJlIGEg
cmVmZXJlbmNlIHRvIEByZWYgYXJyYXlfdCwKLSAgICBAcmVmIG9iamVjdF90LCBAcmVmIHN0cmlu
Z190LCBAcmVmIGJvb2xlYW5fdCwgQHJlZiBudW1iZXJfaW50ZWdlcl90LCBvcgotICAgIEByZWYg
bnVtYmVyX2Zsb2F0X3QuIEVuZm9yY2VkIGJ5IHN0YXRpYyBhc3NlcnRpb24uCi0KLSAgICBAcmV0
dXJuIHJlZmVyZW5jZSB0byB0aGUgaW50ZXJuYWxseSBzdG9yZWQgSlNPTiB2YWx1ZSBpZiB0aGUg
cmVxdWVzdGVkCi0gICAgcmVmZXJlbmNlIHR5cGUgQGEgUmVmZXJlbmNlVHlwZSBmaXRzIHRvIHRo
ZSBKU09OIHZhbHVlOyB0aHJvd3MKLSAgICBzdGQ6OmRvbWFpbl9lcnJvciBvdGhlcndpc2UKLQot
ICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpbiBjYXNlIHBhc3NlZCB0eXBlIEBhIFJlZmVy
ZW5jZVR5cGUgaXMKLSAgICBpbmNvbXBhdGlibGUgd2l0aCB0aGUgc3RvcmVkIEpTT04gdmFsdWUK
LQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBleGFt
cGxlIHNob3dzIHNldmVyYWwgY2FsbHMgdG8gYGdldF9yZWYoKWAuLGdldF9yZWZ9Ci0KLSAgICBA
c2luY2UgdmVyc2lvbiAxLjEuMAotICAgICovCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgUmVmZXJl
bmNlVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gICAgICAgICAgICAgICAgIHN0ZDo6
aXNfcmVmZXJlbmNlPFJlZmVyZW5jZVR5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+Ci0gICAg
UmVmZXJlbmNlVHlwZSBnZXRfcmVmKCkKLSAgICB7Ci0gICAgICAgIC8vIGRlbGVnYXRlIGNhbGwg
dG8gZ2V0X3JlZl9pbXBsCi0gICAgICAgIHJldHVybiBnZXRfcmVmX2ltcGw8UmVmZXJlbmNlVHlw
ZT4oKnRoaXMpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBnZXQgYSByZWZlcmVuY2Ug
dmFsdWUgKGltcGxpY2l0KQotICAgIEBjb3B5ZG9jIGdldF9yZWYoKQotICAgICovCi0gICAgdGVt
cGxhdGU8dHlwZW5hbWUgUmVmZXJlbmNlVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0g
ICAgICAgICAgICAgICAgIHN0ZDo6aXNfcmVmZXJlbmNlPFJlZmVyZW5jZVR5cGU+Ojp2YWx1ZSBh
bmQKLSAgICAgICAgICAgICAgICAgc3RkOjppc19jb25zdDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9y
ZWZlcmVuY2U8UmVmZXJlbmNlVHlwZT46OnR5cGU+Ojp2YWx1ZSwgaW50Pjo6dHlwZSA9IDA+Ci0g
ICAgUmVmZXJlbmNlVHlwZSBnZXRfcmVmKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIGRlbGVn
YXRlIGNhbGwgdG8gZ2V0X3JlZl9pbXBsCi0gICAgICAgIHJldHVybiBnZXRfcmVmX2ltcGw8UmVm
ZXJlbmNlVHlwZT4oKnRoaXMpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBnZXQgYSB2
YWx1ZSAoaW1wbGljaXQpCi0KLSAgICBJbXBsaWNpdCB0eXBlIGNvbnZlcnNpb24gYmV0d2VlbiB0
aGUgSlNPTiB2YWx1ZSBhbmQgYSBjb21wYXRpYmxlIHZhbHVlLgotICAgIFRoZSBjYWxsIGlzIHJl
YWxpemVkIGJ5IGNhbGxpbmcgQHJlZiBnZXQoKSBjb25zdC4KLQotICAgIEB0cGFyYW0gVmFsdWVU
eXBlIG5vbi1wb2ludGVyIHR5cGUgY29tcGF0aWJsZSB0byB0aGUgSlNPTiB2YWx1ZSwgZm9yCi0g
ICAgaW5zdGFuY2UgYGludGAgZm9yIEpTT04gaW50ZWdlciBudW1iZXJzLCBgYm9vbGAgZm9yIEpT
T04gYm9vbGVhbnMsIG9yCi0gICAgYHN0ZDo6dmVjdG9yYCB0eXBlcyBmb3IgSlNPTiBhcnJheXMu
IFRoZSBjaGFyYWN0ZXIgdHlwZSBvZiBAcmVmIHN0cmluZ190Ci0gICAgYXMgd2VsbCBhcyBhbiBp
bml0aWFsaXplciBsaXN0IG9mIHRoaXMgdHlwZSBpcyBleGNsdWRlZCB0byBhdm9pZAotICAgIGFt
YmlndWl0aWVzIGFzIHRoZXNlIHR5cGVzIGltcGxpY2l0bHkgY29udmVydCB0byBgc3RkOjpzdHJp
bmdgLgotCi0gICAgQHJldHVybiBjb3B5IG9mIHRoZSBKU09OIHZhbHVlLCBjb252ZXJ0ZWQgdG8g
dHlwZSBAYSBWYWx1ZVR5cGUKLQotICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpbiBjYXNl
IHBhc3NlZCB0eXBlIEBhIFZhbHVlVHlwZSBpcyBpbmNvbXBhdGlibGUKLSAgICB0byBKU09OLCB0
aHJvd24gYnkgQHJlZiBnZXQoKSBjb25zdAotCi0gICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRo
ZSBzaXplIG9mIHRoZSBKU09OIHZhbHVlLgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxl
IGJlbG93IHNob3dzIHNldmVyYWwgY29udmVyc2lvbnMgZnJvbSBKU09OIHZhbHVlcwotICAgIHRv
IG90aGVyIHR5cGVzLiBUaGVyZSBhIGZldyB0aGluZ3MgdG8gbm90ZTogKDEpIEZsb2F0aW5nLXBv
aW50IG51bWJlcnMgY2FuCi0gICAgYmUgY29udmVydGVkIHRvIGludGVnZXJzXCwgKDIpIEEgSlNP
TiBhcnJheSBjYW4gYmUgY29udmVydGVkIHRvIGEgc3RhbmRhcmQKLSAgICBgc3RkOjp2ZWN0b3I8
c2hvcnQ+YFwsICgzKSBBIEpTT04gb2JqZWN0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gQysrCi0gICAg
YXNzb2NpYXRpdmUgY29udGFpbmVycyBzdWNoIGFzIGBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpz
dHJpbmdcLAotICAgIGpzb24+YC4sb3BlcmF0b3JfX1ZhbHVlVHlwZX0KLQotICAgIEBzaW5jZSB2
ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICB0ZW1wbGF0ZSA8IHR5cGVuYW1lIFZhbHVlVHlwZSwg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWYgPAotICAgICAgICAgICAgICAgICAgIG5vdCBzdGQ6Omlz
X3BvaW50ZXI8VmFsdWVUeXBlPjo6dmFsdWUgYW5kCi0gICAgICAgICAgICAgICAgICAgbm90IHN0
ZDo6aXNfc2FtZTxWYWx1ZVR5cGUsIHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlPjo6dmFs
dWUKLSNpZm5kZWYgX01TQ19WRVIgIC8vIGZpeCBmb3IgaXNzdWUgIzE2NyBvcGVyYXRvcjw8IGFt
YmlndWl0eSB1bmRlciBWUzIwMTUKLSAgICAgICAgICAgICAgICAgICBhbmQgbm90IHN0ZDo6aXNf
c2FtZTxWYWx1ZVR5cGUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDx0eXBlbmFtZSBzdHJpbmdfdDo6
dmFsdWVfdHlwZT4+Ojp2YWx1ZQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgLCBpbnQgPjo6
dHlwZSA9IDAgPgotICAgIG9wZXJhdG9yIFZhbHVlVHlwZSgpIGNvbnN0Ci0gICAgewotICAgICAg
ICAvLyBkZWxlZ2F0ZSB0aGUgY2FsbCB0byBnZXQ8PigpIGNvbnN0Ci0gICAgICAgIHJldHVybiBn
ZXQ8VmFsdWVUeXBlPigpOwotICAgIH0KLQotICAgIC8vLyBAfQotCi0KLSAgICAvLy8vLy8vLy8v
Ly8vLy8vLy8vLwotICAgIC8vIGVsZW1lbnQgYWNjZXNzIC8vCi0gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLQotICAgIC8vLyBAbmFtZSBlbGVtZW50IGFjY2VzcwotICAgIC8vLyBBY2Nlc3MgdG8g
dGhlIEpTT04gdmFsdWUuCi0gICAgLy8vIEB7Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgYWNjZXNz
IHNwZWNpZmllZCBhcnJheSBlbGVtZW50IHdpdGggYm91bmRzIGNoZWNraW5nCi0KLSAgICBSZXR1
cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IHNwZWNpZmllZCBsb2NhdGlvbiBAYSBp
ZHgsIHdpdGgKLSAgICBib3VuZHMgY2hlY2tpbmcuCi0KLSAgICBAcGFyYW1baW5dIGlkeCAgaW5k
ZXggb2YgdGhlIGVsZW1lbnQgdG8gYWNjZXNzCi0KLSAgICBAcmV0dXJuIHJlZmVyZW5jZSB0byB0
aGUgZWxlbWVudCBhdCBpbmRleCBAYSBpZHgKLQotICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJv
ciBpZiB0aGUgSlNPTiB2YWx1ZSBpcyBub3QgYW4gYXJyYXk7IGV4YW1wbGU6Ci0gICAgYCJjYW5u
b3QgdXNlIGF0KCkgd2l0aCBzdHJpbmciYAotICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSBp
ZiB0aGUgaW5kZXggQGEgaWR4IGlzIG91dCBvZiByYW5nZSBvZiB0aGUgYXJyYXk7Ci0gICAgdGhh
dCBpcywgYGlkeCA+PSBzaXplKClgOyBleGFtcGxlOiBgImFycmF5IGluZGV4IDcgaXMgb3V0IG9m
IHJhbmdlImAKLQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgotCi0gICAgQGxpdmVleGFtcGxl
e1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBhcnJheSBlbGVtZW50cyBjYW4gYmUgcmVhZCBh
bmQKLSAgICB3cml0dGVuIHVzaW5nIGBhdCgpYC4sYXRfX3NpemVfdHlwZX0KLQotICAgIEBzaW5j
ZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIGlkeCkK
LSAgICB7Ci0gICAgICAgIC8vIGF0IG9ubHkgd29ya3MgZm9yIGFycmF5cwotICAgICAgICBpZiAo
aXNfYXJyYXkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgSlNPTl9UUlkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5hcnJheS0+YXQoaWR4KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIEpTT05fQ0FUQ0ggKHN0ZDo6b3V0X29mX3JhbmdlJikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYmV0dGVyIGV4Y2VwdGlvbiBl
eHBsYW5hdGlvbgotICAgICAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjpvdXRfb2ZfcmFuZ2Uo
ImFycmF5IGluZGV4ICIgKyBzdGQ6OnRvX3N0cmluZyhpZHgpICsgIiBpcyBvdXQgb2YgcmFuZ2Ui
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0g
ICAgICAgICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9tYWluX2Vycm9yKCJjYW5ub3QgdXNlIGF0KCkg
d2l0aCAiICsgdHlwZV9uYW1lKCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIQotICAg
IEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIGFycmF5IGVsZW1lbnQgd2l0aCBib3VuZHMgY2hlY2tp
bmcKLQotICAgIFJldHVybnMgYSBjb25zdCByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQgc3Bl
Y2lmaWVkIGxvY2F0aW9uIEBhIGlkeCwKLSAgICB3aXRoIGJvdW5kcyBjaGVja2luZy4KLQotICAg
IEBwYXJhbVtpbl0gaWR4ICBpbmRleCBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKLQotICAgIEBy
ZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGluZGV4IEBhIGlkeAotCi0g
ICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIHRoZSBKU09OIHZhbHVlIGlzIG5vdCBhbiBh
cnJheTsgZXhhbXBsZToKLSAgICBgImNhbm5vdCB1c2UgYXQoKSB3aXRoIHN0cmluZyJgCi0gICAg
QHRocm93IHN0ZDo6b3V0X29mX3JhbmdlIGlmIHRoZSBpbmRleCBAYSBpZHggaXMgb3V0IG9mIHJh
bmdlIG9mIHRoZSBhcnJheTsKLSAgICB0aGF0IGlzLCBgaWR4ID49IHNpemUoKWA7IGV4YW1wbGU6
IGAiYXJyYXkgaW5kZXggNyBpcyBvdXQgb2YgcmFuZ2UiYAotCi0gICAgQGNvbXBsZXhpdHkgQ29u
c3RhbnQuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IGFy
cmF5IGVsZW1lbnRzIGNhbiBiZSByZWFkIHVzaW5nCi0gICAgYGF0KClgLixhdF9fc2l6ZV90eXBl
X2NvbnN0fQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIGNvbnN0X3Jl
ZmVyZW5jZSBhdChzaXplX3R5cGUgaWR4KSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gYXQgb25s
eSB3b3JrcyBmb3IgYXJyYXlzCi0gICAgICAgIGlmIChpc19hcnJheSgpKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBKU09OX1RSWQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBtX3ZhbHVlLmFycmF5LT5hdChpZHgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgSlNP
Tl9DQVRDSCAoc3RkOjpvdXRfb2ZfcmFuZ2UmKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIC8vIGNyZWF0ZSBiZXR0ZXIgZXhjZXB0aW9uIGV4cGxhbmF0aW9uCi0gICAgICAgICAgICAg
ICAgSlNPTl9USFJPVyhzdGQ6Om91dF9vZl9yYW5nZSgiYXJyYXkgaW5kZXggIiArIHN0ZDo6dG9f
c3RyaW5nKGlkeCkgKyAiIGlzIG91dCBvZiByYW5nZSIpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTT05fVEhST1coc3Rk
Ojpkb21haW5fZXJyb3IoImNhbm5vdCB1c2UgYXQoKSB3aXRoICIgKyB0eXBlX25hbWUoKSkpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIGFjY2VzcyBzcGVjaWZpZWQg
b2JqZWN0IGVsZW1lbnQgd2l0aCBib3VuZHMgY2hlY2tpbmcKLQotICAgIFJldHVybnMgYSByZWZl
cmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQgd2l0aCBzcGVjaWZpZWQga2V5IEBhIGtleSwgd2l0aAot
ICAgIGJvdW5kcyBjaGVja2luZy4KLQotICAgIEBwYXJhbVtpbl0ga2V5ICBrZXkgb2YgdGhlIGVs
ZW1lbnQgdG8gYWNjZXNzCi0KLSAgICBAcmV0dXJuIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBh
dCBrZXkgQGEga2V5Ci0KLSAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgdGhlIEpTT04g
dmFsdWUgaXMgbm90IGFuIG9iamVjdDsgZXhhbXBsZToKLSAgICBgImNhbm5vdCB1c2UgYXQoKSB3
aXRoIGJvb2xlYW4iYAotICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSBpZiB0aGUga2V5IEBh
IGtleSBpcyBpcyBub3Qgc3RvcmVkIGluIHRoZSBvYmplY3Q7Ci0gICAgdGhhdCBpcywgYGZpbmQo
a2V5KSA9PSBlbmQoKWA7IGV4YW1wbGU6IGAia2V5ICJ0aGUgZmFzdCIgbm90IGZvdW5kImAKLQot
ICAgIEBjb21wbGV4aXR5IExvZ2FyaXRobWljIGluIHRoZSBzaXplIG9mIHRoZSBjb250YWluZXIu
Ci0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IG9iamVjdCBl
bGVtZW50cyBjYW4gYmUgcmVhZCBhbmQKLSAgICB3cml0dGVuIHVzaW5nIGBhdCgpYC4sYXRfX29i
amVjdF90X2tleV90eXBlfQotCi0gICAgQHNhIEByZWYgb3BlcmF0b3JbXShjb25zdCB0eXBlbmFt
ZSBvYmplY3RfdDo6a2V5X3R5cGUmKSBmb3IgdW5jaGVja2VkCi0gICAgYWNjZXNzIGJ5IHJlZmVy
ZW5jZQotICAgIEBzYSBAcmVmIHZhbHVlKCkgZm9yIGFjY2VzcyBieSB2YWx1ZSB3aXRoIGEgZGVm
YXVsdCB2YWx1ZQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIHJlZmVy
ZW5jZSBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmIGtleSkKLSAgICB7Ci0g
ICAgICAgIC8vIGF0IG9ubHkgd29ya3MgZm9yIG9iamVjdHMKLSAgICAgICAgaWYgKGlzX29iamVj
dCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBKU09OX1RSWQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLm9iamVjdC0+YXQoa2V5KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIEpTT05fQ0FUQ0ggKHN0ZDo6b3V0X29mX3JhbmdlJikKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYmV0dGVyIGV4Y2VwdGlvbiBleHBsYW5h
dGlvbgotICAgICAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjpvdXRfb2ZfcmFuZ2UoImtleSAn
IiArIGtleSArICInIG5vdCBmb3VuZCIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjpkb21haW5f
ZXJyb3IoImNhbm5vdCB1c2UgYXQoKSB3aXRoICIgKyB0eXBlX25hbWUoKSkpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIGFjY2VzcyBzcGVjaWZpZWQgb2JqZWN0IGVs
ZW1lbnQgd2l0aCBib3VuZHMgY2hlY2tpbmcKLQotICAgIFJldHVybnMgYSBjb25zdCByZWZlcmVu
Y2UgdG8gdGhlIGVsZW1lbnQgYXQgd2l0aCBzcGVjaWZpZWQga2V5IEBhIGtleSwKLSAgICB3aXRo
IGJvdW5kcyBjaGVja2luZy4KLQotICAgIEBwYXJhbVtpbl0ga2V5ICBrZXkgb2YgdGhlIGVsZW1l
bnQgdG8gYWNjZXNzCi0KLSAgICBAcmV0dXJuIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVu
dCBhdCBrZXkgQGEga2V5Ci0KLSAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgdGhlIEpT
T04gdmFsdWUgaXMgbm90IGFuIG9iamVjdDsgZXhhbXBsZToKLSAgICBgImNhbm5vdCB1c2UgYXQo
KSB3aXRoIGJvb2xlYW4iYAotICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSBpZiB0aGUga2V5
IEBhIGtleSBpcyBpcyBub3Qgc3RvcmVkIGluIHRoZSBvYmplY3Q7Ci0gICAgdGhhdCBpcywgYGZp
bmQoa2V5KSA9PSBlbmQoKWA7IGV4YW1wbGU6IGAia2V5ICJ0aGUgZmFzdCIgbm90IGZvdW5kImAK
LQotICAgIEBjb21wbGV4aXR5IExvZ2FyaXRobWljIGluIHRoZSBzaXplIG9mIHRoZSBjb250YWlu
ZXIuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IG9iamVj
dCBlbGVtZW50cyBjYW4gYmUgcmVhZCB1c2luZwotICAgIGBhdCgpYC4sYXRfX29iamVjdF90X2tl
eV90eXBlX2NvbnN0fQotCi0gICAgQHNhIEByZWYgb3BlcmF0b3JbXShjb25zdCB0eXBlbmFtZSBv
YmplY3RfdDo6a2V5X3R5cGUmKSBmb3IgdW5jaGVja2VkCi0gICAgYWNjZXNzIGJ5IHJlZmVyZW5j
ZQotICAgIEBzYSBAcmVmIHZhbHVlKCkgZm9yIGFjY2VzcyBieSB2YWx1ZSB3aXRoIGEgZGVmYXVs
dCB2YWx1ZQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIGNvbnN0X3Jl
ZmVyZW5jZSBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmIGtleSkgY29uc3QK
LSAgICB7Ci0gICAgICAgIC8vIGF0IG9ubHkgd29ya3MgZm9yIG9iamVjdHMKLSAgICAgICAgaWYg
KGlzX29iamVjdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBKU09OX1RSWQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLm9iamVjdC0+YXQoa2V5KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIEpTT05fQ0FUQ0ggKHN0ZDo6b3V0X29mX3JhbmdlJikK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBjcmVhdGUgYmV0dGVyIGV4Y2VwdGlv
biBleHBsYW5hdGlvbgotICAgICAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjpvdXRfb2ZfcmFu
Z2UoImtleSAnIiArIGtleSArICInIG5vdCBmb3VuZCIpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTT05fVEhST1coc3Rk
Ojpkb21haW5fZXJyb3IoImNhbm5vdCB1c2UgYXQoKSB3aXRoICIgKyB0eXBlX25hbWUoKSkpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIGFjY2VzcyBzcGVjaWZpZWQg
YXJyYXkgZWxlbWVudAotCi0gICAgUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBh
dCBzcGVjaWZpZWQgbG9jYXRpb24gQGEgaWR4LgotCi0gICAgQG5vdGUgSWYgQGEgaWR4IGlzIGJl
eW9uZCB0aGUgcmFuZ2Ugb2YgdGhlIGFycmF5IChpLmUuLCBgaWR4ID49IHNpemUoKWApLAotICAg
IHRoZW4gdGhlIGFycmF5IGlzIHNpbGVudGx5IGZpbGxlZCB1cCB3aXRoIGBudWxsYCB2YWx1ZXMg
dG8gbWFrZSBgaWR4YCBhCi0gICAgdmFsaWQgcmVmZXJlbmNlIHRvIHRoZSBsYXN0IHN0b3JlZCBl
bGVtZW50LgotCi0gICAgQHBhcmFtW2luXSBpZHggIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIGFj
Y2VzcwotCi0gICAgQHJldHVybiByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQgaW5kZXggQGEg
aWR4Ci0KLSAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgSlNPTiBpcyBub3QgYW4gYXJy
YXkgb3IgbnVsbDsgZXhhbXBsZToKLSAgICBgImNhbm5vdCB1c2Ugb3BlcmF0b3JbXSB3aXRoIHN0
cmluZyJgCi0KLSAgICBAY29tcGxleGl0eSBDb25zdGFudCBpZiBAYSBpZHggaXMgaW4gdGhlIHJh
bmdlIG9mIHRoZSBhcnJheS4gT3RoZXJ3aXNlCi0gICAgbGluZWFyIGluIGBpZHggLSBzaXplKClg
LgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBhcnJheSBl
bGVtZW50cyBjYW4gYmUgcmVhZCBhbmQKLSAgICB3cml0dGVuIHVzaW5nIGBbXWAgb3BlcmF0b3Iu
IE5vdGUgdGhlIGFkZGl0aW9uIG9mIGBudWxsYAotICAgIHZhbHVlcy4sb3BlcmF0b3JhcnJheV9f
c2l6ZV90eXBlfQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIHJlZmVy
ZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBpZHgpCi0gICAgewotICAgICAgICAvLyBpbXBsaWNp
dGx5IGNvbnZlcnQgbnVsbCB2YWx1ZSB0byBhbiBlbXB0eSBhcnJheQotICAgICAgICBpZiAoaXNf
bnVsbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3R5cGUgPSB2YWx1ZV90OjphcnJheTsK
LSAgICAgICAgICAgIG1fdmFsdWUuYXJyYXkgPSBjcmVhdGU8YXJyYXlfdD4oKTsKLSAgICAgICAg
ICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG9wZXJhdG9y
W10gb25seSB3b3JrcyBmb3IgYXJyYXlzCi0gICAgICAgIGlmIChpc19hcnJheSgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICAvLyBmaWxsIHVwIGFycmF5IHdpdGggbnVsbCB2YWx1ZXMgaWYgZ2l2
ZW4gaWR4IGlzIG91dHNpZGUgcmFuZ2UKLSAgICAgICAgICAgIGlmIChpZHggPj0gbV92YWx1ZS5h
cnJheS0+c2l6ZSgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1fdmFsdWUuYXJy
YXktPmluc2VydChtX3ZhbHVlLmFycmF5LT5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWR4IC0gbV92YWx1ZS5hcnJheS0+c2l6ZSgpICsgMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzaWNfanNvbigpKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYXJyYXktPm9wZXJhdG9yW10oaWR4KTsK
LSAgICAgICAgfQotCi0gICAgICAgIEpTT05fVEhST1coc3RkOjpkb21haW5fZXJyb3IoImNhbm5v
dCB1c2Ugb3BlcmF0b3JbXSB3aXRoICIgKyB0eXBlX25hbWUoKSkpOwotICAgIH0KLQotICAgIC8q
IQotICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIGFycmF5IGVsZW1lbnQKLQotICAgIFJldHVy
bnMgYSBjb25zdCByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQgc3BlY2lmaWVkIGxvY2F0aW9u
IEBhIGlkeC4KLQotICAgIEBwYXJhbVtpbl0gaWR4ICBpbmRleCBvZiB0aGUgZWxlbWVudCB0byBh
Y2Nlc3MKLQotICAgIEByZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGlu
ZGV4IEBhIGlkeAotCi0gICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEpTT04gaXMgbm90
IGFuIGFycmF5OyBleGFtcGxlOiBgImNhbm5vdCB1c2UKLSAgICBvcGVyYXRvcltdIHdpdGggbnVs
bCJgCi0KLSAgICBAY29tcGxleGl0eSBDb25zdGFudC4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUg
ZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgYXJyYXkgZWxlbWVudHMgY2FuIGJlIHJlYWQgdXNpbmcK
LSAgICB0aGUgYFtdYCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fc2l6ZV90eXBlX2NvbnN0fQot
Ci0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIGNvbnN0X3JlZmVyZW5jZSBv
cGVyYXRvcltdKHNpemVfdHlwZSBpZHgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBjb25zdCBv
cGVyYXRvcltdIG9ubHkgd29ya3MgZm9yIGFycmF5cwotICAgICAgICBpZiAoaXNfYXJyYXkoKSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUuYXJyYXktPm9wZXJhdG9yW10o
aWR4KTsKLSAgICAgICAgfQotCi0gICAgICAgIEpTT05fVEhST1coc3RkOjpkb21haW5fZXJyb3Io
ImNhbm5vdCB1c2Ugb3BlcmF0b3JbXSB3aXRoICIgKyB0eXBlX25hbWUoKSkpOwotICAgIH0KLQot
ICAgIC8qIQotICAgIEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVjdCBlbGVtZW50Ci0KLSAg
ICBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IHdpdGggc3BlY2lmaWVkIGtl
eSBAYSBrZXkuCi0KLSAgICBAbm90ZSBJZiBAYSBrZXkgaXMgbm90IGZvdW5kIGluIHRoZSBvYmpl
Y3QsIHRoZW4gaXQgaXMgc2lsZW50bHkgYWRkZWQgdG8KLSAgICB0aGUgb2JqZWN0IGFuZCBmaWxs
ZWQgd2l0aCBhIGBudWxsYCB2YWx1ZSB0byBtYWtlIGBrZXlgIGEgdmFsaWQgcmVmZXJlbmNlLgot
ICAgIEluIGNhc2UgdGhlIHZhbHVlIHdhcyBgbnVsbGAgYmVmb3JlLCBpdCBpcyBjb252ZXJ0ZWQg
dG8gYW4gb2JqZWN0LgotCi0gICAgQHBhcmFtW2luXSBrZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0
byBhY2Nlc3MKLQotICAgIEByZXR1cm4gcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGtleSBA
YSBrZXkKLQotICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBKU09OIGlzIG5vdCBhbiBv
YmplY3Qgb3IgbnVsbDsgZXhhbXBsZToKLSAgICBgImNhbm5vdCB1c2Ugb3BlcmF0b3JbXSB3aXRo
IHN0cmluZyJgCi0KLSAgICBAY29tcGxleGl0eSBMb2dhcml0aG1pYyBpbiB0aGUgc2l6ZSBvZiB0
aGUgY29udGFpbmVyLgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dz
IGhvdyBvYmplY3QgZWxlbWVudHMgY2FuIGJlIHJlYWQgYW5kCi0gICAgd3JpdHRlbiB1c2luZyB0
aGUgYFtdYCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fa2V5X3R5cGV9Ci0KLSAgICBAc2EgQHJl
ZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmKSBmb3IgYWNjZXNzIGJ5IHJl
ZmVyZW5jZQotICAgIHdpdGggcmFuZ2UgY2hlY2tpbmcKLSAgICBAc2EgQHJlZiB2YWx1ZSgpIGZv
ciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRlZmF1bHQgdmFsdWUKLQotICAgIEBzaW5jZSB2ZXJz
aW9uIDEuMC4wCi0gICAgKi8KLSAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShjb25zdCB0eXBlbmFt
ZSBvYmplY3RfdDo6a2V5X3R5cGUmIGtleSkKLSAgICB7Ci0gICAgICAgIC8vIGltcGxpY2l0bHkg
Y29udmVydCBudWxsIHZhbHVlIHRvIGFuIGVtcHR5IG9iamVjdAotICAgICAgICBpZiAoaXNfbnVs
bCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3R5cGUgPSB2YWx1ZV90OjpvYmplY3Q7Ci0g
ICAgICAgICAgICBtX3ZhbHVlLm9iamVjdCA9IGNyZWF0ZTxvYmplY3RfdD4oKTsKLSAgICAgICAg
ICAgIGFzc2VydF9pbnZhcmlhbnQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG9wZXJhdG9y
W10gb25seSB3b3JrcyBmb3Igb2JqZWN0cwotICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLm9iamVjdC0+b3BlcmF0b3JbXShrZXkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigiY2Fu
bm90IHVzZSBvcGVyYXRvcltdIHdpdGggIiArIHR5cGVfbmFtZSgpKSk7Ci0gICAgfQotCi0gICAg
LyohCi0gICAgQGJyaWVmIHJlYWQtb25seSBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVjdCBlbGVtZW50
Ci0KLSAgICBSZXR1cm5zIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IHdpdGgg
c3BlY2lmaWVkIGtleSBAYSBrZXkuIE5vCi0gICAgYm91bmRzIGNoZWNraW5nIGlzIHBlcmZvcm1l
ZC4KLQotICAgIEB3YXJuaW5nIElmIHRoZSBlbGVtZW50IHdpdGgga2V5IEBhIGtleSBkb2VzIG5v
dCBleGlzdCwgdGhlIGJlaGF2aW9yIGlzCi0gICAgdW5kZWZpbmVkLgotCi0gICAgQHBhcmFtW2lu
XSBrZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKLQotICAgIEByZXR1cm4gY29uc3Qg
cmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKLQotICAgIEBwcmUgVGhlIGVs
ZW1lbnQgd2l0aCBrZXkgQGEga2V5IG11c3QgZXhpc3QuICoqVGhpcyBwcmVjb25kaXRpb24gaXMK
LSAgICAgICAgIGVuZm9yY2VkIHdpdGggYW4gYXNzZXJ0aW9uLioqCi0KLSAgICBAdGhyb3cgc3Rk
Ojpkb21haW5fZXJyb3IgaWYgSlNPTiBpcyBub3QgYW4gb2JqZWN0OyBleGFtcGxlOiBgImNhbm5v
dCB1c2UKLSAgICBvcGVyYXRvcltdIHdpdGggbnVsbCJgCi0KLSAgICBAY29tcGxleGl0eSBMb2dh
cml0aG1pYyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgotCi0gICAgQGxpdmVleGFtcGxl
e1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMgY2FuIGJlIHJlYWQg
dXNpbmcKLSAgICB0aGUgYFtdYCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fa2V5X3R5cGVfY29u
c3R9Ci0KLSAgICBAc2EgQHJlZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUm
KSBmb3IgYWNjZXNzIGJ5IHJlZmVyZW5jZQotICAgIHdpdGggcmFuZ2UgY2hlY2tpbmcKLSAgICBA
c2EgQHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRlZmF1bHQgdmFsdWUK
LQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICBjb25zdF9yZWZlcmVuY2Ug
b3BlcmF0b3JbXShjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmIGtleSkgY29uc3QK
LSAgICB7Ci0gICAgICAgIC8vIGNvbnN0IG9wZXJhdG9yW10gb25seSB3b3JrcyBmb3Igb2JqZWN0
cwotICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2Vy
dChtX3ZhbHVlLm9iamVjdC0+ZmluZChrZXkpICE9IG1fdmFsdWUub2JqZWN0LT5lbmQoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5vYmplY3QtPmZpbmQoa2V5KS0+c2Vjb25kOwotICAg
ICAgICB9Ci0KLSAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigiY2Fubm90IHVz
ZSBvcGVyYXRvcltdIHdpdGggIiArIHR5cGVfbmFtZSgpKSk7Ci0gICAgfQotCi0gICAgLyohCi0g
ICAgQGJyaWVmIGFjY2VzcyBzcGVjaWZpZWQgb2JqZWN0IGVsZW1lbnQKLQotICAgIFJldHVybnMg
YSByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQgd2l0aCBzcGVjaWZpZWQga2V5IEBhIGtleS4K
LQotICAgIEBub3RlIElmIEBhIGtleSBpcyBub3QgZm91bmQgaW4gdGhlIG9iamVjdCwgdGhlbiBp
dCBpcyBzaWxlbnRseSBhZGRlZCB0bwotICAgIHRoZSBvYmplY3QgYW5kIGZpbGxlZCB3aXRoIGEg
YG51bGxgIHZhbHVlIHRvIG1ha2UgYGtleWAgYSB2YWxpZCByZWZlcmVuY2UuCi0gICAgSW4gY2Fz
ZSB0aGUgdmFsdWUgd2FzIGBudWxsYCBiZWZvcmUsIGl0IGlzIGNvbnZlcnRlZCB0byBhbiBvYmpl
Y3QuCi0KLSAgICBAcGFyYW1baW5dIGtleSAga2V5IG9mIHRoZSBlbGVtZW50IHRvIGFjY2Vzcwot
Ci0gICAgQHJldHVybiByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgYXQga2V5IEBhIGtleQotCi0g
ICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEpTT04gaXMgbm90IGFuIG9iamVjdCBvciBu
dWxsOyBleGFtcGxlOgotICAgIGAiY2Fubm90IHVzZSBvcGVyYXRvcltdIHdpdGggc3RyaW5nImAK
LQotICAgIEBjb21wbGV4aXR5IExvZ2FyaXRobWljIGluIHRoZSBzaXplIG9mIHRoZSBjb250YWlu
ZXIuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IG9iamVj
dCBlbGVtZW50cyBjYW4gYmUgcmVhZCBhbmQKLSAgICB3cml0dGVuIHVzaW5nIHRoZSBgW11gIG9w
ZXJhdG9yLixvcGVyYXRvcmFycmF5X19rZXlfdHlwZX0KLQotICAgIEBzYSBAcmVmIGF0KGNvbnN0
IHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSYpIGZvciBhY2Nlc3MgYnkgcmVmZXJlbmNlCi0g
ICAgd2l0aCByYW5nZSBjaGVja2luZwotICAgIEBzYSBAcmVmIHZhbHVlKCkgZm9yIGFjY2VzcyBi
eSB2YWx1ZSB3aXRoIGEgZGVmYXVsdCB2YWx1ZQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAK
LSAgICAqLwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IG4+Ci0gICAgcmVm
ZXJlbmNlIG9wZXJhdG9yW10oVCAqICgma2V5KVtuXSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBv
cGVyYXRvcltdKHN0YXRpY19jYXN0PGNvbnN0IFQ+KGtleSkpOwotICAgIH0KLQotICAgIC8qIQot
ICAgIEBicmllZiByZWFkLW9ubHkgYWNjZXNzIHNwZWNpZmllZCBvYmplY3QgZWxlbWVudAotCi0g
ICAgUmV0dXJucyBhIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCB3aXRoIHNwZWNp
ZmllZCBrZXkgQGEga2V5LiBObwotICAgIGJvdW5kcyBjaGVja2luZyBpcyBwZXJmb3JtZWQuCi0K
LSAgICBAd2FybmluZyBJZiB0aGUgZWxlbWVudCB3aXRoIGtleSBAYSBrZXkgZG9lcyBub3QgZXhp
c3QsIHRoZSBiZWhhdmlvciBpcwotICAgIHVuZGVmaW5lZC4KLQotICAgIEBub3RlIFRoaXMgZnVu
Y3Rpb24gaXMgcmVxdWlyZWQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3aXRoIENsYW5nLgot
Ci0gICAgQHBhcmFtW2luXSBrZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKLQotICAg
IEByZXR1cm4gY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKLQot
ICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBKU09OIGlzIG5vdCBhbiBvYmplY3Q7IGV4
YW1wbGU6IGAiY2Fubm90IHVzZQotICAgIG9wZXJhdG9yW10gd2l0aCBudWxsImAKLQotICAgIEBj
b21wbGV4aXR5IExvZ2FyaXRobWljIGluIHRoZSBzaXplIG9mIHRoZSBjb250YWluZXIuCi0KLSAg
ICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgaG93IG9iamVjdCBlbGVtZW50
cyBjYW4gYmUgcmVhZCB1c2luZwotICAgIHRoZSBgW11gIG9wZXJhdG9yLixvcGVyYXRvcmFycmF5
X19rZXlfdHlwZV9jb25zdH0KLQotICAgIEBzYSBAcmVmIGF0KGNvbnN0IHR5cGVuYW1lIG9iamVj
dF90OjprZXlfdHlwZSYpIGZvciBhY2Nlc3MgYnkgcmVmZXJlbmNlCi0gICAgd2l0aCByYW5nZSBj
aGVja2luZwotICAgIEBzYSBAcmVmIHZhbHVlKCkgZm9yIGFjY2VzcyBieSB2YWx1ZSB3aXRoIGEg
ZGVmYXVsdCB2YWx1ZQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IG4+Ci0gICAgY29uc3RfcmVmZXJlbmNlIG9w
ZXJhdG9yW10oVCAqICgma2V5KVtuXSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBvcGVy
YXRvcltdKHN0YXRpY19jYXN0PGNvbnN0IFQ+KGtleSkpOwotICAgIH0KLQotICAgIC8qIQotICAg
IEBicmllZiBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVjdCBlbGVtZW50Ci0KLSAgICBSZXR1cm5zIGEg
cmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IHdpdGggc3BlY2lmaWVkIGtleSBAYSBrZXkuCi0K
LSAgICBAbm90ZSBJZiBAYSBrZXkgaXMgbm90IGZvdW5kIGluIHRoZSBvYmplY3QsIHRoZW4gaXQg
aXMgc2lsZW50bHkgYWRkZWQgdG8KLSAgICB0aGUgb2JqZWN0IGFuZCBmaWxsZWQgd2l0aCBhIGBu
dWxsYCB2YWx1ZSB0byBtYWtlIGBrZXlgIGEgdmFsaWQgcmVmZXJlbmNlLgotICAgIEluIGNhc2Ug
dGhlIHZhbHVlIHdhcyBgbnVsbGAgYmVmb3JlLCBpdCBpcyBjb252ZXJ0ZWQgdG8gYW4gb2JqZWN0
LgotCi0gICAgQHBhcmFtW2luXSBrZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKLQot
ICAgIEByZXR1cm4gcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKLQotICAg
IEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBKU09OIGlzIG5vdCBhbiBvYmplY3Qgb3IgbnVs
bDsgZXhhbXBsZToKLSAgICBgImNhbm5vdCB1c2Ugb3BlcmF0b3JbXSB3aXRoIHN0cmluZyJgCi0K
LSAgICBAY29tcGxleGl0eSBMb2dhcml0aG1pYyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVy
LgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3Qg
ZWxlbWVudHMgY2FuIGJlIHJlYWQgYW5kCi0gICAgd3JpdHRlbiB1c2luZyB0aGUgYFtdYCBvcGVy
YXRvci4sb3BlcmF0b3JhcnJheV9fa2V5X3R5cGV9Ci0KLSAgICBAc2EgQHJlZiBhdChjb25zdCB0
eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmKSBmb3IgYWNjZXNzIGJ5IHJlZmVyZW5jZQotICAg
IHdpdGggcmFuZ2UgY2hlY2tpbmcKLSAgICBAc2EgQHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkg
dmFsdWUgd2l0aCBhIGRlZmF1bHQgdmFsdWUKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMS4wCi0g
ICAgKi8KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIHJlZmVyZW5jZSBvcGVyYXRvcltd
KFQqIGtleSkKLSAgICB7Ci0gICAgICAgIC8vIGltcGxpY2l0bHkgY29udmVydCBudWxsIHRvIG9i
amVjdAotICAgICAgICBpZiAoaXNfbnVsbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3R5
cGUgPSB2YWx1ZV90OjpvYmplY3Q7Ci0gICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWVfdDo6b2Jq
ZWN0OwotICAgICAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gYXQgb25seSB3b3JrcyBmb3Igb2JqZWN0cwotICAgICAgICBpZiAoaXNfb2JqZWN0KCkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLm9iamVjdC0+b3BlcmF0b3Jb
XShrZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJv
cigiY2Fubm90IHVzZSBvcGVyYXRvcltdIHdpdGggIiArIHR5cGVfbmFtZSgpKSk7Ci0gICAgfQot
Ci0gICAgLyohCi0gICAgQGJyaWVmIHJlYWQtb25seSBhY2Nlc3Mgc3BlY2lmaWVkIG9iamVjdCBl
bGVtZW50Ci0KLSAgICBSZXR1cm5zIGEgY29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0
IHdpdGggc3BlY2lmaWVkIGtleSBAYSBrZXkuIE5vCi0gICAgYm91bmRzIGNoZWNraW5nIGlzIHBl
cmZvcm1lZC4KLQotICAgIEB3YXJuaW5nIElmIHRoZSBlbGVtZW50IHdpdGgga2V5IEBhIGtleSBk
b2VzIG5vdCBleGlzdCwgdGhlIGJlaGF2aW9yIGlzCi0gICAgdW5kZWZpbmVkLgotCi0gICAgQHBh
cmFtW2luXSBrZXkgIGtleSBvZiB0aGUgZWxlbWVudCB0byBhY2Nlc3MKLQotICAgIEByZXR1cm4g
Y29uc3QgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkKLQotICAgIEBwcmUg
VGhlIGVsZW1lbnQgd2l0aCBrZXkgQGEga2V5IG11c3QgZXhpc3QuICoqVGhpcyBwcmVjb25kaXRp
b24gaXMKLSAgICAgICAgIGVuZm9yY2VkIHdpdGggYW4gYXNzZXJ0aW9uLioqCi0KLSAgICBAdGhy
b3cgc3RkOjpkb21haW5fZXJyb3IgaWYgSlNPTiBpcyBub3QgYW4gb2JqZWN0OyBleGFtcGxlOiBg
ImNhbm5vdCB1c2UKLSAgICBvcGVyYXRvcltdIHdpdGggbnVsbCJgCi0KLSAgICBAY29tcGxleGl0
eSBMb2dhcml0aG1pYyBpbiB0aGUgc2l6ZSBvZiB0aGUgY29udGFpbmVyLgotCi0gICAgQGxpdmVl
eGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBvYmplY3QgZWxlbWVudHMgY2FuIGJl
IHJlYWQgdXNpbmcKLSAgICB0aGUgYFtdYCBvcGVyYXRvci4sb3BlcmF0b3JhcnJheV9fa2V5X3R5
cGVfY29uc3R9Ci0KLSAgICBAc2EgQHJlZiBhdChjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5
X3R5cGUmKSBmb3IgYWNjZXNzIGJ5IHJlZmVyZW5jZQotICAgIHdpdGggcmFuZ2UgY2hlY2tpbmcK
LSAgICBAc2EgQHJlZiB2YWx1ZSgpIGZvciBhY2Nlc3MgYnkgdmFsdWUgd2l0aCBhIGRlZmF1bHQg
dmFsdWUKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMS4wCi0gICAgKi8KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKFQqIGtleSkgY29uc3QK
LSAgICB7Ci0gICAgICAgIC8vIGF0IG9ubHkgd29ya3MgZm9yIG9iamVjdHMKLSAgICAgICAgaWYg
KGlzX29iamVjdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQobV92YWx1ZS5vYmpl
Y3QtPmZpbmQoa2V5KSAhPSBtX3ZhbHVlLm9iamVjdC0+ZW5kKCkpOwotICAgICAgICAgICAgcmV0
dXJuIG1fdmFsdWUub2JqZWN0LT5maW5kKGtleSktPnNlY29uZDsKLSAgICAgICAgfQotCi0gICAg
ICAgIEpTT05fVEhST1coc3RkOjpkb21haW5fZXJyb3IoImNhbm5vdCB1c2Ugb3BlcmF0b3JbXSB3
aXRoICIgKyB0eXBlX25hbWUoKSkpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBhY2Nl
c3Mgc3BlY2lmaWVkIG9iamVjdCBlbGVtZW50IHdpdGggZGVmYXVsdCB2YWx1ZQotCi0gICAgUmV0
dXJucyBlaXRoZXIgYSBjb3B5IG9mIGFuIG9iamVjdCdzIGVsZW1lbnQgYXQgdGhlIHNwZWNpZmll
ZCBrZXkgQGEga2V5Ci0gICAgb3IgYSBnaXZlbiBkZWZhdWx0IHZhbHVlIGlmIG5vIGVsZW1lbnQg
d2l0aCBrZXkgQGEga2V5IGV4aXN0cy4KLQotICAgIFRoZSBmdW5jdGlvbiBpcyBiYXNpY2FsbHkg
ZXF1aXZhbGVudCB0byBleGVjdXRpbmcKLSAgICBAY29kZSB7LmNwcH0KLSAgICB0cnkgewotICAg
ICAgICByZXR1cm4gYXQoa2V5KTsKLSAgICB9IGNhdGNoKHN0ZDo6b3V0X29mX3JhbmdlKSB7Ci0g
ICAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOwotICAgIH0KLSAgICBAZW5kY29kZQotCi0gICAg
QG5vdGUgVW5saWtlIEByZWYgYXQoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiks
IHRoaXMgZnVuY3Rpb24KLSAgICBkb2VzIG5vdCB0aHJvdyBpZiB0aGUgZ2l2ZW4ga2V5IEBhIGtl
eSB3YXMgbm90IGZvdW5kLgotCi0gICAgQG5vdGUgVW5saWtlIEByZWYgb3BlcmF0b3JbXShjb25z
dCB0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUmIGtleSksIHRoaXMKLSAgICBmdW5jdGlvbiBk
b2VzIG5vdCBpbXBsaWNpdGx5IGFkZCBhbiBlbGVtZW50IHRvIHRoZSBwb3NpdGlvbiBkZWZpbmVk
IGJ5IEBhCi0gICAga2V5LiBUaGlzIGZ1bmN0aW9uIGlzIGZ1cnRoZXJtb3JlIGFsc28gYXBwbGlj
YWJsZSB0byBjb25zdCBvYmplY3RzLgotCi0gICAgQHBhcmFtW2luXSBrZXkgIGtleSBvZiB0aGUg
ZWxlbWVudCB0byBhY2Nlc3MKLSAgICBAcGFyYW1baW5dIGRlZmF1bHRfdmFsdWUgIHRoZSB2YWx1
ZSB0byByZXR1cm4gaWYgQGEga2V5IGlzIG5vdCBmb3VuZAotCi0gICAgQHRwYXJhbSBWYWx1ZVR5
cGUgdHlwZSBjb21wYXRpYmxlIHRvIEpTT04gdmFsdWVzLCBmb3IgaW5zdGFuY2UgYGludGAgZm9y
Ci0gICAgSlNPTiBpbnRlZ2VyIG51bWJlcnMsIGBib29sYCBmb3IgSlNPTiBib29sZWFucywgb3Ig
YHN0ZDo6dmVjdG9yYCB0eXBlcyBmb3IKLSAgICBKU09OIGFycmF5cy4gTm90ZSB0aGUgdHlwZSBv
ZiB0aGUgZXhwZWN0ZWQgdmFsdWUgYXQgQGEga2V5IGFuZCB0aGUgZGVmYXVsdAotICAgIHZhbHVl
IEBhIGRlZmF1bHRfdmFsdWUgbXVzdCBiZSBjb21wYXRpYmxlLgotCi0gICAgQHJldHVybiBjb3B5
IG9mIHRoZSBlbGVtZW50IGF0IGtleSBAYSBrZXkgb3IgQGEgZGVmYXVsdF92YWx1ZSBpZiBAYSBr
ZXkKLSAgICBpcyBub3QgZm91bmQKLQotICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBK
U09OIGlzIG5vdCBhbiBvYmplY3Q7IGV4YW1wbGU6IGAiY2Fubm90IHVzZQotICAgIHZhbHVlKCkg
d2l0aCBudWxsImAKLQotICAgIEBjb21wbGV4aXR5IExvZ2FyaXRobWljIGluIHRoZSBzaXplIG9m
IHRoZSBjb250YWluZXIuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cgc2hv
d3MgaG93IG9iamVjdCBlbGVtZW50cyBjYW4gYmUgcXVlcmllZAotICAgIHdpdGggYSBkZWZhdWx0
IHZhbHVlLixiYXNpY19qc29uX192YWx1ZX0KLQotICAgIEBzYSBAcmVmIGF0KGNvbnN0IHR5cGVu
YW1lIG9iamVjdF90OjprZXlfdHlwZSYpIGZvciBhY2Nlc3MgYnkgcmVmZXJlbmNlCi0gICAgd2l0
aCByYW5nZSBjaGVja2luZwotICAgIEBzYSBAcmVmIG9wZXJhdG9yW10oY29uc3QgdHlwZW5hbWUg
b2JqZWN0X3Q6OmtleV90eXBlJikgZm9yIHVuY2hlY2tlZAotICAgIGFjY2VzcyBieSByZWZlcmVu
Y2UKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFz
cyBWYWx1ZVR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICAgICAgICAgICBz
dGQ6OmlzX2NvbnZlcnRpYmxlPGJhc2ljX2pzb25fdCwgVmFsdWVUeXBlPjo6dmFsdWUsIGludD46
OnR5cGUgPSAwPgotICAgIFZhbHVlVHlwZSB2YWx1ZShjb25zdCB0eXBlbmFtZSBvYmplY3RfdDo6
a2V5X3R5cGUmIGtleSwgVmFsdWVUeXBlIGRlZmF1bHRfdmFsdWUpIGNvbnN0Ci0gICAgewotICAg
ICAgICAvLyBhdCBvbmx5IHdvcmtzIGZvciBvYmplY3RzCi0gICAgICAgIGlmIChpc19vYmplY3Qo
KSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gaWYga2V5IGlzIGZvdW5kLCByZXR1cm4gdmFs
dWUgYW5kIGdpdmVuIGRlZmF1bHQgdmFsdWUgb3RoZXJ3aXNlCi0gICAgICAgICAgICBjb25zdCBh
dXRvIGl0ID0gZmluZChrZXkpOwotICAgICAgICAgICAgaWYgKGl0ICE9IGVuZCgpKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAqaXQ7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHJldHVybiBkZWZhdWx0X3ZhbHVlOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgewotICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigiY2Fu
bm90IHVzZSB2YWx1ZSgpIHdpdGggIiArIHR5cGVfbmFtZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgb3ZlcmxvYWQgZm9yIGEgZGVmYXVsdCB2YWx1ZSBvZiB0
eXBlIGNvbnN0IGNoYXIqCi0gICAgQGNvcHlkb2MgYmFzaWNfanNvbjo6dmFsdWUoY29uc3QgdHlw
ZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiwgVmFsdWVUeXBlKSBjb25zdAotICAgICovCi0gICAg
c3RyaW5nX3QgdmFsdWUoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiBrZXksIGNv
bnN0IGNoYXIqIGRlZmF1bHRfdmFsdWUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdmFs
dWUoa2V5LCBzdHJpbmdfdChkZWZhdWx0X3ZhbHVlKSk7Ci0gICAgfQotCi0gICAgLyohCi0gICAg
QGJyaWVmIGFjY2VzcyBzcGVjaWZpZWQgb2JqZWN0IGVsZW1lbnQgdmlhIEpTT04gUG9pbnRlciB3
aXRoIGRlZmF1bHQgdmFsdWUKLQotICAgIFJldHVybnMgZWl0aGVyIGEgY29weSBvZiBhbiBvYmpl
Y3QncyBlbGVtZW50IGF0IHRoZSBzcGVjaWZpZWQga2V5IEBhIGtleQotICAgIG9yIGEgZ2l2ZW4g
ZGVmYXVsdCB2YWx1ZSBpZiBubyBlbGVtZW50IHdpdGgga2V5IEBhIGtleSBleGlzdHMuCi0KLSAg
ICBUaGUgZnVuY3Rpb24gaXMgYmFzaWNhbGx5IGVxdWl2YWxlbnQgdG8gZXhlY3V0aW5nCi0gICAg
QGNvZGUgey5jcHB9Ci0gICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIGF0KHB0cik7Ci0gICAgfSBj
YXRjaChzdGQ6Om91dF9vZl9yYW5nZSkgewotICAgICAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsK
LSAgICB9Ci0gICAgQGVuZGNvZGUKLQotICAgIEBub3RlIFVubGlrZSBAcmVmIGF0KGNvbnN0IGpz
b25fcG9pbnRlciYpLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHRocm93Ci0gICAgaWYgdGhlIGdp
dmVuIGtleSBAYSBrZXkgd2FzIG5vdCBmb3VuZC4KLQotICAgIEBwYXJhbVtpbl0gcHRyICBhIEpT
T04gcG9pbnRlciB0byB0aGUgZWxlbWVudCB0byBhY2Nlc3MKLSAgICBAcGFyYW1baW5dIGRlZmF1
bHRfdmFsdWUgIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgQGEgcHRyIGZvdW5kIG5vIHZhbHVlCi0K
LSAgICBAdHBhcmFtIFZhbHVlVHlwZSB0eXBlIGNvbXBhdGlibGUgdG8gSlNPTiB2YWx1ZXMsIGZv
ciBpbnN0YW5jZSBgaW50YCBmb3IKLSAgICBKU09OIGludGVnZXIgbnVtYmVycywgYGJvb2xgIGZv
ciBKU09OIGJvb2xlYW5zLCBvciBgc3RkOjp2ZWN0b3JgIHR5cGVzIGZvcgotICAgIEpTT04gYXJy
YXlzLiBOb3RlIHRoZSB0eXBlIG9mIHRoZSBleHBlY3RlZCB2YWx1ZSBhdCBAYSBrZXkgYW5kIHRo
ZSBkZWZhdWx0Ci0gICAgdmFsdWUgQGEgZGVmYXVsdF92YWx1ZSBtdXN0IGJlIGNvbXBhdGlibGUu
Ci0KLSAgICBAcmV0dXJuIGNvcHkgb2YgdGhlIGVsZW1lbnQgYXQga2V5IEBhIGtleSBvciBAYSBk
ZWZhdWx0X3ZhbHVlIGlmIEBhIGtleQotICAgIGlzIG5vdCBmb3VuZAotCi0gICAgQHRocm93IHN0
ZDo6ZG9tYWluX2Vycm9yIGlmIEpTT04gaXMgbm90IGFuIG9iamVjdDsgZXhhbXBsZTogYCJjYW5u
b3QgdXNlCi0gICAgdmFsdWUoKSB3aXRoIG51bGwiYAotCi0gICAgQGNvbXBsZXhpdHkgTG9nYXJp
dGhtaWMgaW4gdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lci4KLQotICAgIEBsaXZlZXhhbXBsZXtU
aGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgb2JqZWN0IGVsZW1lbnRzIGNhbiBiZSBxdWVyaWVk
Ci0gICAgd2l0aCBhIGRlZmF1bHQgdmFsdWUuLGJhc2ljX2pzb25fX3ZhbHVlX3B0cn0KLQotICAg
IEBzYSBAcmVmIG9wZXJhdG9yW10oY29uc3QganNvbl9wb2ludGVyJikgZm9yIHVuY2hlY2tlZCBh
Y2Nlc3MgYnkgcmVmZXJlbmNlCi0KLSAgICBAc2luY2UgdmVyc2lvbiAyLjAuMgotICAgICovCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgVmFsdWVUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAg
ICAgICAgICAgICAgICAgc3RkOjppc19jb252ZXJ0aWJsZTxiYXNpY19qc29uX3QsIFZhbHVlVHlw
ZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KLSAgICBWYWx1ZVR5cGUgdmFsdWUoY29uc3QganNv
bl9wb2ludGVyJiBwdHIsIFZhbHVlVHlwZSBkZWZhdWx0X3ZhbHVlKSBjb25zdAotICAgIHsKLSAg
ICAgICAgLy8gYXQgb25seSB3b3JrcyBmb3Igb2JqZWN0cwotICAgICAgICBpZiAoaXNfb2JqZWN0
KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlmIHBvaW50ZXIgcmVzb2x2ZXMgYSB2YWx1
ZSwgcmV0dXJuIGl0IG9yIHVzZSBkZWZhdWx0IHZhbHVlCi0gICAgICAgICAgICBKU09OX1RSWQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBwdHIuZ2V0X2NoZWNrZWQodGhp
cyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBKU09OX0NBVENIIChzdGQ6Om91dF9vZl9y
YW5nZSYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRfdmFs
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBKU09OX1RIUk9XKHN0ZDo6
ZG9tYWluX2Vycm9yKCJjYW5ub3QgdXNlIHZhbHVlKCkgd2l0aCAiICsgdHlwZV9uYW1lKCkpKTsK
LSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgb3ZlcmxvYWQgZm9yIGEgZGVmYXVsdCB2YWx1
ZSBvZiB0eXBlIGNvbnN0IGNoYXIqCi0gICAgQGNvcHlkb2MgYmFzaWNfanNvbjo6dmFsdWUoY29u
c3QganNvbl9wb2ludGVyJiwgVmFsdWVUeXBlKSBjb25zdAotICAgICovCi0gICAgc3RyaW5nX3Qg
dmFsdWUoY29uc3QganNvbl9wb2ludGVyJiBwdHIsIGNvbnN0IGNoYXIqIGRlZmF1bHRfdmFsdWUp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdmFsdWUocHRyLCBzdHJpbmdfdChkZWZhdWx0
X3ZhbHVlKSk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIGFjY2VzcyB0aGUgZmlyc3Qg
ZWxlbWVudAotCi0gICAgUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgZmlyc3QgZWxlbWVudCBp
biB0aGUgY29udGFpbmVyLiBGb3IgYSBKU09OCi0gICAgY29udGFpbmVyIGBjYCwgdGhlIGV4cHJl
c3Npb24gYGMuZnJvbnQoKWAgaXMgZXF1aXZhbGVudCB0byBgKmMuYmVnaW4oKWAuCi0KLSAgICBA
cmV0dXJuIEluIGNhc2Ugb2YgYSBzdHJ1Y3R1cmVkIHR5cGUgKGFycmF5IG9yIG9iamVjdCksIGEg
cmVmZXJlbmNlIHRvIHRoZQotICAgIGZpcnN0IGVsZW1lbnQgaXMgcmV0dXJuZWQuIEluIGNhc2Ug
b2YgbnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4gdmFsdWVzLCBhCi0gICAgcmVmZXJlbmNlIHRv
IHRoZSB2YWx1ZSBpcyByZXR1cm5lZC4KLQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgotCi0g
ICAgQHByZSBUaGUgSlNPTiB2YWx1ZSBtdXN0IG5vdCBiZSBgbnVsbGAgKHdvdWxkIHRocm93IGBz
dGQ6Om91dF9vZl9yYW5nZWApCi0gICAgb3IgYW4gZW1wdHkgYXJyYXkgb3Igb2JqZWN0ICh1bmRl
ZmluZWQgYmVoYXZpb3IsICoqZ3VhcmRlZCBieQotICAgIGFzc2VydGlvbnMqKikuCi0gICAgQHBv
c3QgVGhlIEpTT04gdmFsdWUgcmVtYWlucyB1bmNoYW5nZWQuCi0KLSAgICBAdGhyb3cgc3RkOjpv
dXRfb2ZfcmFuZ2Ugd2hlbiBjYWxsZWQgb24gYG51bGxgIHZhbHVlCi0KLSAgICBAbGl2ZWV4YW1w
bGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGBmcm9udCgpYC4sZnJv
bnR9Ci0KLSAgICBAc2EgQHJlZiBiYWNrKCkgLS0gYWNjZXNzIHRoZSBsYXN0IGVsZW1lbnQKLQot
ICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICByZWZlcmVuY2UgZnJvbnQoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuICpiZWdpbigpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBj
b3B5ZG9jIGJhc2ljX2pzb246OmZyb250KCkKLSAgICAqLwotICAgIGNvbnN0X3JlZmVyZW5jZSBm
cm9udCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKmNiZWdpbigpOwotICAgIH0KLQot
ICAgIC8qIQotICAgIEBicmllZiBhY2Nlc3MgdGhlIGxhc3QgZWxlbWVudAotCi0gICAgUmV0dXJu
cyBhIHJlZmVyZW5jZSB0byB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBjb250YWluZXIuIEZvciBh
IEpTT04KLSAgICBjb250YWluZXIgYGNgLCB0aGUgZXhwcmVzc2lvbiBgYy5iYWNrKClgIGlzIGVx
dWl2YWxlbnQgdG8KLSAgICBAY29kZSB7LmNwcH0KLSAgICBhdXRvIHRtcCA9IGMuZW5kKCk7Ci0g
ICAgLS10bXA7Ci0gICAgcmV0dXJuICp0bXA7Ci0gICAgQGVuZGNvZGUKLQotICAgIEByZXR1cm4g
SW4gY2FzZSBvZiBhIHN0cnVjdHVyZWQgdHlwZSAoYXJyYXkgb3Igb2JqZWN0KSwgYSByZWZlcmVu
Y2UgdG8gdGhlCi0gICAgbGFzdCBlbGVtZW50IGlzIHJldHVybmVkLiBJbiBjYXNlIG9mIG51bWJl
ciwgc3RyaW5nLCBvciBib29sZWFuIHZhbHVlcywgYQotICAgIHJlZmVyZW5jZSB0byB0aGUgdmFs
dWUgaXMgcmV0dXJuZWQuCi0KLSAgICBAY29tcGxleGl0eSBDb25zdGFudC4KLQotICAgIEBwcmUg
VGhlIEpTT04gdmFsdWUgbXVzdCBub3QgYmUgYG51bGxgICh3b3VsZCB0aHJvdyBgc3RkOjpvdXRf
b2ZfcmFuZ2VgKQotICAgIG9yIGFuIGVtcHR5IGFycmF5IG9yIG9iamVjdCAodW5kZWZpbmVkIGJl
aGF2aW9yLCAqKmd1YXJkZWQgYnkKLSAgICBhc3NlcnRpb25zKiopLgotICAgIEBwb3N0IFRoZSBK
U09OIHZhbHVlIHJlbWFpbnMgdW5jaGFuZ2VkLgotCi0gICAgQHRocm93IHN0ZDo6b3V0X29mX3Jh
bmdlIHdoZW4gY2FsbGVkIG9uIGBudWxsYCB2YWx1ZS4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUg
Zm9sbG93aW5nIGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgYGJhY2soKWAuLGJhY2t9Ci0KLSAg
ICBAc2EgQHJlZiBmcm9udCgpIC0tIGFjY2VzcyB0aGUgZmlyc3QgZWxlbWVudAotCi0gICAgQHNp
bmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIHJlZmVyZW5jZSBiYWNrKCkKLSAgICB7Ci0g
ICAgICAgIGF1dG8gdG1wID0gZW5kKCk7Ci0gICAgICAgIC0tdG1wOwotICAgICAgICByZXR1cm4g
KnRtcDsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAY29weWRvYyBiYXNpY19qc29uOjpiYWNrKCkK
LSAgICAqLwotICAgIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IGF1dG8gdG1wID0gY2VuZCgpOwotICAgICAgICAtLXRtcDsKLSAgICAgICAgcmV0dXJuICp0bXA7
Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIHJlbW92ZSBlbGVtZW50IGdpdmVuIGFuIGl0
ZXJhdG9yCi0KLSAgICBSZW1vdmVzIHRoZSBlbGVtZW50IHNwZWNpZmllZCBieSBpdGVyYXRvciBA
YSBwb3MuIFRoZSBpdGVyYXRvciBAYSBwb3MgbXVzdAotICAgIGJlIHZhbGlkIGFuZCBkZXJlZmVy
ZW5jZWFibGUuIFRodXMgdGhlIGBlbmQoKWAgaXRlcmF0b3IgKHdoaWNoIGlzIHZhbGlkLAotICAg
IGJ1dCBpcyBub3QgZGVyZWZlcmVuY2VhYmxlKSBjYW5ub3QgYmUgdXNlZCBhcyBhIHZhbHVlIGZv
ciBAYSBwb3MuCi0KLSAgICBJZiBjYWxsZWQgb24gYSBwcmltaXRpdmUgdHlwZSBvdGhlciB0aGFu
IGBudWxsYCwgdGhlIHJlc3VsdGluZyBKU09OIHZhbHVlCi0gICAgd2lsbCBiZSBgbnVsbGAuCi0K
LSAgICBAcGFyYW1baW5dIHBvcyBpdGVyYXRvciB0byB0aGUgZWxlbWVudCB0byByZW1vdmUKLSAg
ICBAcmV0dXJuIEl0ZXJhdG9yIGZvbGxvd2luZyB0aGUgbGFzdCByZW1vdmVkIGVsZW1lbnQuIElm
IHRoZSBpdGVyYXRvciBAYQotICAgIHBvcyByZWZlcnMgdG8gdGhlIGxhc3QgZWxlbWVudCwgdGhl
IGBlbmQoKWAgaXRlcmF0b3IgaXMgcmV0dXJuZWQuCi0KLSAgICBAdHBhcmFtIEl0ZXJhdG9yVHlw
ZSBhbiBAcmVmIGl0ZXJhdG9yIG9yIEByZWYgY29uc3RfaXRlcmF0b3IKLQotICAgIEBwb3N0IElu
dmFsaWRhdGVzIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyBhdCBvciBhZnRlciB0aGUgcG9pbnQg
b2YgdGhlCi0gICAgZXJhc2UsIGluY2x1ZGluZyB0aGUgYGVuZCgpYCBpdGVyYXRvci4KLQotICAg
IEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBjYWxsZWQgb24gYSBgbnVsbGAgdmFsdWU7IGV4
YW1wbGU6IGAiY2Fubm90Ci0gICAgdXNlIGVyYXNlKCkgd2l0aCBudWxsImAKLSAgICBAdGhyb3cg
c3RkOjpkb21haW5fZXJyb3IgaWYgY2FsbGVkIG9uIGFuIGl0ZXJhdG9yIHdoaWNoIGRvZXMgbm90
IGJlbG9uZyB0bwotICAgIHRoZSBjdXJyZW50IEpTT04gdmFsdWU7IGV4YW1wbGU6IGAiaXRlcmF0
b3IgZG9lcyBub3QgZml0IGN1cnJlbnQgdmFsdWUiYAotICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9y
YW5nZSBpZiBjYWxsZWQgb24gYSBwcmltaXRpdmUgdHlwZSB3aXRoIGludmFsaWQKLSAgICBpdGVy
YXRvciAoaS5lLiwgYW55IGl0ZXJhdG9yIHdoaWNoIGlzIG5vdCBgYmVnaW4oKWApOyBleGFtcGxl
OiBgIml0ZXJhdG9yCi0gICAgb3V0IG9mIHJhbmdlImAKLQotICAgIEBjb21wbGV4aXR5IFRoZSBj
b21wbGV4aXR5IGRlcGVuZHMgb24gdGhlIHR5cGU6Ci0gICAgLSBvYmplY3RzOiBhbW9ydGl6ZWQg
Y29uc3RhbnQKLSAgICAtIGFycmF5czogbGluZWFyIGluIGRpc3RhbmNlIGJldHdlZW4gQGEgcG9z
IGFuZCB0aGUgZW5kIG9mIHRoZSBjb250YWluZXIKLSAgICAtIHN0cmluZ3M6IGxpbmVhciBpbiB0
aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcKLSAgICAtIG90aGVyIHR5cGVzOiBjb25zdGFudAotCi0g
ICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIHRoZSByZXN1bHQgb2YgYGVyYXNlKClg
IGZvciBkaWZmZXJlbnQgSlNPTgotICAgIHR5cGVzLixlcmFzZV9fSXRlcmF0b3JUeXBlfQotCi0g
ICAgQHNhIEByZWYgZXJhc2UoSXRlcmF0b3JUeXBlLCBJdGVyYXRvclR5cGUpIC0tIHJlbW92ZXMg
dGhlIGVsZW1lbnRzIGluCi0gICAgdGhlIGdpdmVuIHJhbmdlCi0gICAgQHNhIEByZWYgZXJhc2Uo
Y29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJikgLS0gcmVtb3ZlcyB0aGUgZWxlbWVu
dAotICAgIGZyb20gYW4gb2JqZWN0IGF0IHRoZSBnaXZlbiBrZXkKLSAgICBAc2EgQHJlZiBlcmFz
ZShjb25zdCBzaXplX3R5cGUpIC0tIHJlbW92ZXMgdGhlIGVsZW1lbnQgZnJvbSBhbiBhcnJheSBh
dAotICAgIHRoZSBnaXZlbiBpbmRleAotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAq
LwotICAgIHRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9yVHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVf
aWY8Ci0gICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTxJdGVyYXRvclR5cGUsIHR5cGVuYW1l
IGJhc2ljX2pzb25fdDo6aXRlcmF0b3I+Ojp2YWx1ZSBvcgotICAgICAgICAgICAgICAgICBzdGQ6
OmlzX3NhbWU8SXRlcmF0b3JUeXBlLCB0eXBlbmFtZSBiYXNpY19qc29uX3Q6OmNvbnN0X2l0ZXJh
dG9yPjo6dmFsdWUsIGludD46OnR5cGUKLSAgICAgICAgICAgICA9IDA+Ci0gICAgSXRlcmF0b3JU
eXBlIGVyYXNlKEl0ZXJhdG9yVHlwZSBwb3MpCi0gICAgewotICAgICAgICAvLyBtYWtlIHN1cmUg
aXRlcmF0b3IgZml0cyB0aGUgY3VycmVudCB2YWx1ZQotICAgICAgICBpZiAodGhpcyAhPSBwb3Mu
bV9vYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjpkb21haW5f
ZXJyb3IoIml0ZXJhdG9yIGRvZXMgbm90IGZpdCBjdXJyZW50IHZhbHVlIikpOwotICAgICAgICB9
Ci0KLSAgICAgICAgSXRlcmF0b3JUeXBlIHJlc3VsdCA9IGVuZCgpOwotCi0gICAgICAgIHN3aXRj
aCAobV90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46
Ci0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKLSAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6Ci0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51
bWJlcl91bnNpZ25lZDoKLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5nOgotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChub3QgcG9zLm1faXQucHJpbWl0aXZlX2l0ZXJh
dG9yLmlzX2JlZ2luKCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBK
U09OX1RIUk9XKHN0ZDo6b3V0X29mX3JhbmdlKCJpdGVyYXRvciBvdXQgb2YgcmFuZ2UiKSk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGlzX3N0cmluZygpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgQWxsb2NhdG9yVHlwZTxzdHJpbmdf
dD4gYWxsb2M7Ci0gICAgICAgICAgICAgICAgICAgIGFsbG9jLmRlc3Ryb3kobV92YWx1ZS5zdHJp
bmcpOwotICAgICAgICAgICAgICAgICAgICBhbGxvYy5kZWFsbG9jYXRlKG1fdmFsdWUuc3RyaW5n
LCAxKTsKLSAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS5zdHJpbmcgPSBudWxscHRyOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1fdHlwZSA9IHZhbHVlX3Q6Om51bGw7
Ci0gICAgICAgICAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQubV9pdC5vYmplY3RfaXRlcmF0
b3IgPSBtX3ZhbHVlLm9iamVjdC0+ZXJhc2UocG9zLm1faXQub2JqZWN0X2l0ZXJhdG9yKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2
YWx1ZV90OjphcnJheToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQubV9p
dC5hcnJheV9pdGVyYXRvciA9IG1fdmFsdWUuYXJyYXktPmVyYXNlKHBvcy5tX2l0LmFycmF5X2l0
ZXJhdG9yKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBKU09OX1RIUk9X
KHN0ZDo6ZG9tYWluX2Vycm9yKCJjYW5ub3QgdXNlIGVyYXNlKCkgd2l0aCAiICsgdHlwZV9uYW1l
KCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIHJlbW92ZSBlbGVtZW50cyBnaXZlbiBhbiBp
dGVyYXRvciByYW5nZQotCi0gICAgUmVtb3ZlcyB0aGUgZWxlbWVudCBzcGVjaWZpZWQgYnkgdGhl
IHJhbmdlIGBbZmlyc3Q7IGxhc3QpYC4gVGhlIGl0ZXJhdG9yCi0gICAgQGEgZmlyc3QgZG9lcyBu
b3QgbmVlZCB0byBiZSBkZXJlZmVyZW5jZWFibGUgaWYgYGZpcnN0ID09IGxhc3RgOiBlcmFzaW5n
Ci0gICAgYW4gZW1wdHkgcmFuZ2UgaXMgYSBuby1vcC4KLQotICAgIElmIGNhbGxlZCBvbiBhIHBy
aW1pdGl2ZSB0eXBlIG90aGVyIHRoYW4gYG51bGxgLCB0aGUgcmVzdWx0aW5nIEpTT04gdmFsdWUK
LSAgICB3aWxsIGJlIGBudWxsYC4KLQotICAgIEBwYXJhbVtpbl0gZmlyc3QgaXRlcmF0b3IgdG8g
dGhlIGJlZ2lubmluZyBvZiB0aGUgcmFuZ2UgdG8gcmVtb3ZlCi0gICAgQHBhcmFtW2luXSBsYXN0
IGl0ZXJhdG9yIHBhc3QgdGhlIGVuZCBvZiB0aGUgcmFuZ2UgdG8gcmVtb3ZlCi0gICAgQHJldHVy
biBJdGVyYXRvciBmb2xsb3dpbmcgdGhlIGxhc3QgcmVtb3ZlZCBlbGVtZW50LiBJZiB0aGUgaXRl
cmF0b3IgQGEKLSAgICBzZWNvbmQgcmVmZXJzIHRvIHRoZSBsYXN0IGVsZW1lbnQsIHRoZSBgZW5k
KClgIGl0ZXJhdG9yIGlzIHJldHVybmVkLgotCi0gICAgQHRwYXJhbSBJdGVyYXRvclR5cGUgYW4g
QHJlZiBpdGVyYXRvciBvciBAcmVmIGNvbnN0X2l0ZXJhdG9yCi0KLSAgICBAcG9zdCBJbnZhbGlk
YXRlcyBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgYXQgb3IgYWZ0ZXIgdGhlIHBvaW50IG9mIHRo
ZQotICAgIGVyYXNlLCBpbmNsdWRpbmcgdGhlIGBlbmQoKWAgaXRlcmF0b3IuCi0KLSAgICBAdGhy
b3cgc3RkOjpkb21haW5fZXJyb3IgaWYgY2FsbGVkIG9uIGEgYG51bGxgIHZhbHVlOyBleGFtcGxl
OiBgImNhbm5vdAotICAgIHVzZSBlcmFzZSgpIHdpdGggbnVsbCJgCi0gICAgQHRocm93IHN0ZDo6
ZG9tYWluX2Vycm9yIGlmIGNhbGxlZCBvbiBpdGVyYXRvcnMgd2hpY2ggZG9lcyBub3QgYmVsb25n
IHRvCi0gICAgdGhlIGN1cnJlbnQgSlNPTiB2YWx1ZTsgZXhhbXBsZTogYCJpdGVyYXRvcnMgZG8g
bm90IGZpdCBjdXJyZW50IHZhbHVlImAKLSAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYg
Y2FsbGVkIG9uIGEgcHJpbWl0aXZlIHR5cGUgd2l0aCBpbnZhbGlkCi0gICAgaXRlcmF0b3JzIChp
LmUuLCBpZiBgZmlyc3QgIT0gYmVnaW4oKWAgYW5kIGBsYXN0ICE9IGVuZCgpYCk7IGV4YW1wbGU6
Ci0gICAgYCJpdGVyYXRvcnMgb3V0IG9mIHJhbmdlImAKLQotICAgIEBjb21wbGV4aXR5IFRoZSBj
b21wbGV4aXR5IGRlcGVuZHMgb24gdGhlIHR5cGU6Ci0gICAgLSBvYmplY3RzOiBgbG9nKHNpemUo
KSkgKyBzdGQ6OmRpc3RhbmNlKGZpcnN0LCBsYXN0KWAKLSAgICAtIGFycmF5czogbGluZWFyIGlu
IHRoZSBkaXN0YW5jZSBiZXR3ZWVuIEBhIGZpcnN0IGFuZCBAYSBsYXN0LCBwbHVzIGxpbmVhcgot
ICAgICAgaW4gdGhlIGRpc3RhbmNlIGJldHdlZW4gQGEgbGFzdCBhbmQgZW5kIG9mIHRoZSBjb250
YWluZXIKLSAgICAtIHN0cmluZ3M6IGxpbmVhciBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcK
LSAgICAtIG90aGVyIHR5cGVzOiBjb25zdGFudAotCi0gICAgQGxpdmVleGFtcGxle1RoZSBleGFt
cGxlIHNob3dzIHRoZSByZXN1bHQgb2YgYGVyYXNlKClgIGZvciBkaWZmZXJlbnQgSlNPTgotICAg
IHR5cGVzLixlcmFzZV9fSXRlcmF0b3JUeXBlX0l0ZXJhdG9yVHlwZX0KLQotICAgIEBzYSBAcmVm
IGVyYXNlKEl0ZXJhdG9yVHlwZSkgLS0gcmVtb3ZlcyB0aGUgZWxlbWVudCBhdCBhIGdpdmVuIHBv
c2l0aW9uCi0gICAgQHNhIEByZWYgZXJhc2UoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90
eXBlJikgLS0gcmVtb3ZlcyB0aGUgZWxlbWVudAotICAgIGZyb20gYW4gb2JqZWN0IGF0IHRoZSBn
aXZlbiBrZXkKLSAgICBAc2EgQHJlZiBlcmFzZShjb25zdCBzaXplX3R5cGUpIC0tIHJlbW92ZXMg
dGhlIGVsZW1lbnQgZnJvbSBhbiBhcnJheSBhdAotICAgIHRoZSBnaXZlbiBpbmRleAotCi0gICAg
QHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzIEl0ZXJhdG9y
VHlwZSwgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8Ci0gICAgICAgICAgICAgICAgIHN0ZDo6aXNf
c2FtZTxJdGVyYXRvclR5cGUsIHR5cGVuYW1lIGJhc2ljX2pzb25fdDo6aXRlcmF0b3I+Ojp2YWx1
ZSBvcgotICAgICAgICAgICAgICAgICBzdGQ6OmlzX3NhbWU8SXRlcmF0b3JUeXBlLCB0eXBlbmFt
ZSBiYXNpY19qc29uX3Q6OmNvbnN0X2l0ZXJhdG9yPjo6dmFsdWUsIGludD46OnR5cGUKLSAgICAg
ICAgICAgICA9IDA+Ci0gICAgSXRlcmF0b3JUeXBlIGVyYXNlKEl0ZXJhdG9yVHlwZSBmaXJzdCwg
SXRlcmF0b3JUeXBlIGxhc3QpCi0gICAgewotICAgICAgICAvLyBtYWtlIHN1cmUgaXRlcmF0b3Ig
Zml0cyB0aGUgY3VycmVudCB2YWx1ZQotICAgICAgICBpZiAodGhpcyAhPSBmaXJzdC5tX29iamVj
dCBvciB0aGlzICE9IGxhc3QubV9vYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTT05f
VEhST1coc3RkOjpkb21haW5fZXJyb3IoIml0ZXJhdG9ycyBkbyBub3QgZml0IGN1cnJlbnQgdmFs
dWUiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBJdGVyYXRvclR5cGUgcmVzdWx0ID0gZW5kKCk7
Ci0KLSAgICAgICAgc3dpdGNoIChtX3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6Ym9vbGVhbjoKLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0
OgotICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcjoKLSAgICAgICAgICAg
IGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgotICAgICAgICAgICAgY2FzZSB2YWx1ZV90
OjpzdHJpbmc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG5vdCBmaXJzdC5t
X2l0LnByaW1pdGl2ZV9pdGVyYXRvci5pc19iZWdpbigpIG9yIG5vdCBsYXN0Lm1faXQucHJpbWl0
aXZlX2l0ZXJhdG9yLmlzX2VuZCgpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgSlNPTl9USFJPVyhzdGQ6Om91dF9vZl9yYW5nZSgiaXRlcmF0b3JzIG91dCBvZiByYW5n
ZSIpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNfc3RyaW5n
KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBBbGxvY2F0b3JUeXBl
PHN0cmluZ190PiBhbGxvYzsKLSAgICAgICAgICAgICAgICAgICAgYWxsb2MuZGVzdHJveShtX3Zh
bHVlLnN0cmluZyk7Ci0gICAgICAgICAgICAgICAgICAgIGFsbG9jLmRlYWxsb2NhdGUobV92YWx1
ZS5zdHJpbmcsIDEpOwotICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlLnN0cmluZyA9IG51bGxw
dHI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbV90eXBlID0gdmFsdWVf
dDo6bnVsbDsKLSAgICAgICAgICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6
b2JqZWN0OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdC5tX2l0Lm9iamVj
dF9pdGVyYXRvciA9IG1fdmFsdWUub2JqZWN0LT5lcmFzZShmaXJzdC5tX2l0Lm9iamVjdF9pdGVy
YXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0
Lm1faXQub2JqZWN0X2l0ZXJhdG9yKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXN1bHQubV9pdC5hcnJheV9pdGVyYXRvciA9IG1fdmFsdWUuYXJy
YXktPmVyYXNlKGZpcnN0Lm1faXQuYXJyYXlfaXRlcmF0b3IsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Lm1faXQuYXJyYXlfaXRlcmF0b3IpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjpkb21haW5f
ZXJyb3IoImNhbm5vdCB1c2UgZXJhc2UoKSB3aXRoICIgKyB0eXBlX25hbWUoKSkpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAg
ICAvKiEKLSAgICBAYnJpZWYgcmVtb3ZlIGVsZW1lbnQgZnJvbSBhIEpTT04gb2JqZWN0IGdpdmVu
IGEga2V5Ci0KLSAgICBSZW1vdmVzIGVsZW1lbnRzIGZyb20gYSBKU09OIG9iamVjdCB3aXRoIHRo
ZSBrZXkgdmFsdWUgQGEga2V5LgotCi0gICAgQHBhcmFtW2luXSBrZXkgdmFsdWUgb2YgdGhlIGVs
ZW1lbnRzIHRvIHJlbW92ZQotCi0gICAgQHJldHVybiBOdW1iZXIgb2YgZWxlbWVudHMgcmVtb3Zl
ZC4gSWYgQGEgT2JqZWN0VHlwZSBpcyB0aGUgZGVmYXVsdAotICAgIGBzdGQ6Om1hcGAgdHlwZSwg
dGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsd2F5cyBiZSBgMGAgKEBhIGtleSB3YXMgbm90Ci0gICAg
Zm91bmQpIG9yIGAxYCAoQGEga2V5IHdhcyBmb3VuZCkuCi0KLSAgICBAcG9zdCBSZWZlcmVuY2Vz
IGFuZCBpdGVyYXRvcnMgdG8gdGhlIGVyYXNlZCBlbGVtZW50cyBhcmUgaW52YWxpZGF0ZWQuCi0g
ICAgT3RoZXIgcmVmZXJlbmNlcyBhbmQgaXRlcmF0b3JzIGFyZSBub3QgYWZmZWN0ZWQuCi0KLSAg
ICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3Igd2hlbiBjYWxsZWQgb24gYSB0eXBlIG90aGVyIHRo
YW4gSlNPTiBvYmplY3Q7Ci0gICAgZXhhbXBsZTogYCJjYW5ub3QgdXNlIGVyYXNlKCkgd2l0aCBu
dWxsImAKLQotICAgIEBjb21wbGV4aXR5IGBsb2coc2l6ZSgpKSArIGNvdW50KGtleSlgCi0KLSAg
ICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgdGhlIGVmZmVjdCBvZiBgZXJhc2UoKWAu
LGVyYXNlX19rZXlfdHlwZX0KLQotICAgIEBzYSBAcmVmIGVyYXNlKEl0ZXJhdG9yVHlwZSkgLS0g
cmVtb3ZlcyB0aGUgZWxlbWVudCBhdCBhIGdpdmVuIHBvc2l0aW9uCi0gICAgQHNhIEByZWYgZXJh
c2UoSXRlcmF0b3JUeXBlLCBJdGVyYXRvclR5cGUpIC0tIHJlbW92ZXMgdGhlIGVsZW1lbnRzIGlu
Ci0gICAgdGhlIGdpdmVuIHJhbmdlCi0gICAgQHNhIEByZWYgZXJhc2UoY29uc3Qgc2l6ZV90eXBl
KSAtLSByZW1vdmVzIHRoZSBlbGVtZW50IGZyb20gYW4gYXJyYXkgYXQKLSAgICB0aGUgZ2l2ZW4g
aW5kZXgKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICBzaXplX3R5cGUg
ZXJhc2UoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlJiBrZXkpCi0gICAgewotICAg
ICAgICAvLyB0aGlzIGVyYXNlIG9ubHkgd29ya3MgZm9yIG9iamVjdHMKLSAgICAgICAgaWYgKGlz
X29iamVjdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5vYmplY3Qt
PmVyYXNlKGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9tYWlu
X2Vycm9yKCJjYW5ub3QgdXNlIGVyYXNlKCkgd2l0aCAiICsgdHlwZV9uYW1lKCkpKTsKLSAgICB9
Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgcmVtb3ZlIGVsZW1lbnQgZnJvbSBhIEpTT04gYXJyYXkg
Z2l2ZW4gYW4gaW5kZXgKLQotICAgIFJlbW92ZXMgZWxlbWVudCBmcm9tIGEgSlNPTiBhcnJheSBh
dCB0aGUgaW5kZXggQGEgaWR4LgotCi0gICAgQHBhcmFtW2luXSBpZHggaW5kZXggb2YgdGhlIGVs
ZW1lbnQgdG8gcmVtb3ZlCi0KLSAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3Igd2hlbiBjYWxs
ZWQgb24gYSB0eXBlIG90aGVyIHRoYW4gSlNPTiBhcnJheTsKLSAgICBleGFtcGxlOiBgImNhbm5v
dCB1c2UgZXJhc2UoKSB3aXRoIG51bGwiYAotICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSB3
aGVuIGBpZHggPj0gc2l6ZSgpYDsgZXhhbXBsZTogYCJhcnJheSBpbmRleCAxNwotICAgIGlzIG91
dCBvZiByYW5nZSJgCi0KLSAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gZGlzdGFuY2UgYmV0d2Vl
biBAYSBpZHggYW5kIHRoZSBlbmQgb2YgdGhlIGNvbnRhaW5lci4KLQotICAgIEBsaXZlZXhhbXBs
ZXtUaGUgZXhhbXBsZSBzaG93cyB0aGUgZWZmZWN0IG9mIGBlcmFzZSgpYC4sZXJhc2VfX3NpemVf
dHlwZX0KLQotICAgIEBzYSBAcmVmIGVyYXNlKEl0ZXJhdG9yVHlwZSkgLS0gcmVtb3ZlcyB0aGUg
ZWxlbWVudCBhdCBhIGdpdmVuIHBvc2l0aW9uCi0gICAgQHNhIEByZWYgZXJhc2UoSXRlcmF0b3JU
eXBlLCBJdGVyYXRvclR5cGUpIC0tIHJlbW92ZXMgdGhlIGVsZW1lbnRzIGluCi0gICAgdGhlIGdp
dmVuIHJhbmdlCi0gICAgQHNhIEByZWYgZXJhc2UoY29uc3QgdHlwZW5hbWUgb2JqZWN0X3Q6Omtl
eV90eXBlJikgLS0gcmVtb3ZlcyB0aGUgZWxlbWVudAotICAgIGZyb20gYW4gb2JqZWN0IGF0IHRo
ZSBnaXZlbiBrZXkKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICB2b2lk
IGVyYXNlKGNvbnN0IHNpemVfdHlwZSBpZHgpCi0gICAgewotICAgICAgICAvLyB0aGlzIGVyYXNl
IG9ubHkgd29ya3MgZm9yIGFycmF5cwotICAgICAgICBpZiAoaXNfYXJyYXkoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKGlkeCA+PSBzaXplKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgSlNPTl9USFJPVyhzdGQ6Om91dF9vZl9yYW5nZSgiYXJyYXkgaW5kZXggIiArIHN0
ZDo6dG9fc3RyaW5nKGlkeCkgKyAiIGlzIG91dCBvZiByYW5nZSIpKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgbV92YWx1ZS5hcnJheS0+ZXJhc2UobV92YWx1ZS5hcnJheS0+YmVnaW4o
KSArIHN0YXRpY19jYXN0PGRpZmZlcmVuY2VfdHlwZT4oaWR4KSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9tYWluX2Vy
cm9yKCJjYW5ub3QgdXNlIGVyYXNlKCkgd2l0aCAiICsgdHlwZV9uYW1lKCkpKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vLyBAfQotCi0KLSAgICAvLy8vLy8vLy8vLy8KLSAgICAvLyBsb29r
dXAgLy8KLSAgICAvLy8vLy8vLy8vLy8KLQotICAgIC8vLyBAbmFtZSBsb29rdXAKLSAgICAvLy8g
QHsKLQotICAgIC8qIQotICAgIEBicmllZiBmaW5kIGFuIGVsZW1lbnQgaW4gYSBKU09OIG9iamVj
dAotCi0gICAgRmluZHMgYW4gZWxlbWVudCBpbiBhIEpTT04gb2JqZWN0IHdpdGgga2V5IGVxdWl2
YWxlbnQgdG8gQGEga2V5LiBJZiB0aGUKLSAgICBlbGVtZW50IGlzIG5vdCBmb3VuZCBvciB0aGUg
SlNPTiB2YWx1ZSBpcyBub3QgYW4gb2JqZWN0LCBlbmQoKSBpcwotICAgIHJldHVybmVkLgotCi0g
ICAgQG5vdGUgVGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgQHJlZiBlbmQoKSB3aGVuIGV4ZWN1
dGVkIG9uIGEgSlNPTiB0eXBlCi0gICAgICAgICAgdGhhdCBpcyBub3QgYW4gb2JqZWN0LgotCi0g
ICAgQHBhcmFtW2luXSBrZXkga2V5IHZhbHVlIG9mIHRoZSBlbGVtZW50IHRvIHNlYXJjaCBmb3IK
LQotICAgIEByZXR1cm4gSXRlcmF0b3IgdG8gYW4gZWxlbWVudCB3aXRoIGtleSBlcXVpdmFsZW50
IHRvIEBhIGtleS4gSWYgbm8gc3VjaAotICAgIGVsZW1lbnQgaXMgZm91bmQgb3IgdGhlIEpTT04g
dmFsdWUgaXMgbm90IGFuIG9iamVjdCwgcGFzdC10aGUtZW5kIChzZWUKLSAgICBAcmVmIGVuZCgp
KSBpdGVyYXRvciBpcyByZXR1cm5lZC4KLQotICAgIEBjb21wbGV4aXR5IExvZ2FyaXRobWljIGlu
IHRoZSBzaXplIG9mIHRoZSBKU09OIG9iamVjdC4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhh
bXBsZSBzaG93cyBob3cgYGZpbmQoKWAgaXMgdXNlZC4sZmluZF9fa2V5X3R5cGV9Ci0KLSAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAgaXRlcmF0b3IgZmluZCh0eXBlbmFtZSBv
YmplY3RfdDo6a2V5X3R5cGUga2V5KQotICAgIHsKLSAgICAgICAgYXV0byByZXN1bHQgPSBlbmQo
KTsKLQotICAgICAgICBpZiAoaXNfb2JqZWN0KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
c3VsdC5tX2l0Lm9iamVjdF9pdGVyYXRvciA9IG1fdmFsdWUub2JqZWN0LT5maW5kKGtleSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qIQotICAg
IEBicmllZiBmaW5kIGFuIGVsZW1lbnQgaW4gYSBKU09OIG9iamVjdAotICAgIEBjb3B5ZG9jIGZp
bmQodHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlKQotICAgICovCi0gICAgY29uc3RfaXRlcmF0
b3IgZmluZCh0eXBlbmFtZSBvYmplY3RfdDo6a2V5X3R5cGUga2V5KSBjb25zdAotICAgIHsKLSAg
ICAgICAgYXV0byByZXN1bHQgPSBjZW5kKCk7Ci0KLSAgICAgICAgaWYgKGlzX29iamVjdCgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXN1bHQubV9pdC5vYmplY3RfaXRlcmF0b3IgPSBtX3Zh
bHVlLm9iamVjdC0+ZmluZChrZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgcmV0dXJucyB0aGUgbnVtYmVyIG9mIG9j
Y3VycmVuY2VzIG9mIGEga2V5IGluIGEgSlNPTiBvYmplY3QKLQotICAgIFJldHVybnMgdGhlIG51
bWJlciBvZiBlbGVtZW50cyB3aXRoIGtleSBAYSBrZXkuIElmIE9iamVjdFR5cGUgaXMgdGhlCi0g
ICAgZGVmYXVsdCBgc3RkOjptYXBgIHR5cGUsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBhbHdheXMg
YmUgYDBgIChAYSBrZXkgd2FzCi0gICAgbm90IGZvdW5kKSBvciBgMWAgKEBhIGtleSB3YXMgZm91
bmQpLgotCi0gICAgQG5vdGUgVGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgYDBgIHdoZW4gZXhl
Y3V0ZWQgb24gYSBKU09OIHR5cGUgdGhhdCBpcwotICAgICAgICAgIG5vdCBhbiBvYmplY3QuCi0K
LSAgICBAcGFyYW1baW5dIGtleSBrZXkgdmFsdWUgb2YgdGhlIGVsZW1lbnQgdG8gY291bnQKLQot
ICAgIEByZXR1cm4gTnVtYmVyIG9mIGVsZW1lbnRzIHdpdGgga2V5IEBhIGtleS4gSWYgdGhlIEpT
T04gdmFsdWUgaXMgbm90IGFuCi0gICAgb2JqZWN0LCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUg
YDBgLgotCi0gICAgQGNvbXBsZXhpdHkgTG9nYXJpdGhtaWMgaW4gdGhlIHNpemUgb2YgdGhlIEpT
T04gb2JqZWN0LgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIGhvdyBgY291
bnQoKWAgaXMgdXNlZC4sY291bnR9Ci0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICov
Ci0gICAgc2l6ZV90eXBlIGNvdW50KHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSBrZXkpIGNv
bnN0Ci0gICAgewotICAgICAgICAvLyByZXR1cm4gMCBmb3IgYWxsIG5vbm9iamVjdCB0eXBlcwot
ICAgICAgICByZXR1cm4gaXNfb2JqZWN0KCkgPyBtX3ZhbHVlLm9iamVjdC0+Y291bnQoa2V5KSA6
IDA7Ci0gICAgfQotCi0gICAgLy8vIEB9Ci0KLQotICAgIC8vLy8vLy8vLy8vLy8vLwotICAgIC8v
IGl0ZXJhdG9ycyAvLwotICAgIC8vLy8vLy8vLy8vLy8vLwotCi0gICAgLy8vIEBuYW1lIGl0ZXJh
dG9ycwotICAgIC8vLyBAewotCi0gICAgLyohCi0gICAgQGJyaWVmIHJldHVybnMgYW4gaXRlcmF0
b3IgdG8gdGhlIGZpcnN0IGVsZW1lbnQKLQotICAgIFJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhl
IGZpcnN0IGVsZW1lbnQuCi0KLSAgICBAaW1hZ2UgaHRtbCByYW5nZS1iZWdpbi1lbmQuc3ZnICJJ
bGx1c3RyYXRpb24gZnJvbSBjcHByZWZlcmVuY2UuY29tIgotCi0gICAgQHJldHVybiBpdGVyYXRv
ciB0byB0aGUgZmlyc3QgZWxlbWVudAotCi0gICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCi0KLSAg
ICBAcmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNmeWlu
ZyB0aGUKLSAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9j
b25jZXB0L0NvbnRhaW5lcikKLSAgICByZXF1aXJlbWVudHM6Ci0gICAgLSBUaGUgY29tcGxleGl0
eSBpcyBjb25zdGFudC4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hv
d3MgYW4gZXhhbXBsZSBmb3IgYGJlZ2luKClgLixiZWdpbn0KLQotICAgIEBzYSBAcmVmIGNiZWdp
bigpIC0tIHJldHVybnMgYSBjb25zdCBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nCi0gICAgQHNh
IEByZWYgZW5kKCkgLS0gcmV0dXJucyBhbiBpdGVyYXRvciB0byB0aGUgZW5kCi0gICAgQHNhIEBy
ZWYgY2VuZCgpIC0tIHJldHVybnMgYSBjb25zdCBpdGVyYXRvciB0byB0aGUgZW5kCi0KLSAgICBA
c2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAgaXRlcmF0b3IgYmVnaW4oKSBub2V4Y2Vw
dAotICAgIHsKLSAgICAgICAgaXRlcmF0b3IgcmVzdWx0KHRoaXMpOwotICAgICAgICByZXN1bHQu
c2V0X2JlZ2luKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyohCi0g
ICAgQGNvcHlkb2MgYmFzaWNfanNvbjo6Y2JlZ2luKCkKLSAgICAqLwotICAgIGNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3Qgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIHJldHVybiBjYmVnaW4o
KTsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgcmV0dXJucyBhIGNvbnN0IGl0ZXJhdG9y
IHRvIHRoZSBmaXJzdCBlbGVtZW50Ci0KLSAgICBSZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8g
dGhlIGZpcnN0IGVsZW1lbnQuCi0KLSAgICBAaW1hZ2UgaHRtbCByYW5nZS1iZWdpbi1lbmQuc3Zn
ICJJbGx1c3RyYXRpb24gZnJvbSBjcHByZWZlcmVuY2UuY29tIgotCi0gICAgQHJldHVybiBjb25z
dCBpdGVyYXRvciB0byB0aGUgZmlyc3QgZWxlbWVudAotCi0gICAgQGNvbXBsZXhpdHkgQ29uc3Rh
bnQuCi0KLSAgICBAcmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAg
c2F0aXNmeWluZyB0aGUKLSAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNv
bS93L2NwcC9jb25jZXB0L0NvbnRhaW5lcikKLSAgICByZXF1aXJlbWVudHM6Ci0gICAgLSBUaGUg
Y29tcGxleGl0eSBpcyBjb25zdGFudC4KLSAgICAtIEhhcyB0aGUgc2VtYW50aWNzIG9mIGBjb25z
dF9jYXN0PGNvbnN0IGJhc2ljX2pzb24mPigqdGhpcykuYmVnaW4oKWAuCi0KLSAgICBAbGl2ZWV4
YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGBjYmVnaW4oKWAu
LGNiZWdpbn0KLQotICAgIEBzYSBAcmVmIGJlZ2luKCkgLS0gcmV0dXJucyBhbiBpdGVyYXRvciB0
byB0aGUgYmVnaW5uaW5nCi0gICAgQHNhIEByZWYgZW5kKCkgLS0gcmV0dXJucyBhbiBpdGVyYXRv
ciB0byB0aGUgZW5kCi0gICAgQHNhIEByZWYgY2VuZCgpIC0tIHJldHVybnMgYSBjb25zdCBpdGVy
YXRvciB0byB0aGUgZW5kCi0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAg
Y29uc3RfaXRlcmF0b3IgY2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIGNv
bnN0X2l0ZXJhdG9yIHJlc3VsdCh0aGlzKTsKLSAgICAgICAgcmVzdWx0LnNldF9iZWdpbigpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiByZXR1
cm5zIGFuIGl0ZXJhdG9yIHRvIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQKLQotICAgIFJldHVy
bnMgYW4gaXRlcmF0b3IgdG8gb25lIHBhc3QgdGhlIGxhc3QgZWxlbWVudC4KLQotICAgIEBpbWFn
ZSBodG1sIHJhbmdlLWJlZ2luLWVuZC5zdmcgIklsbHVzdHJhdGlvbiBmcm9tIGNwcHJlZmVyZW5j
ZS5jb20iCi0KLSAgICBAcmV0dXJuIGl0ZXJhdG9yIG9uZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQK
LQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgotCi0gICAgQHJlcXVpcmVtZW50IFRoaXMgZnVu
Y3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhlCi0gICAgW0NvbnRhaW5lcl0o
aHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9Db250YWluZXIpCi0gICAg
cmVxdWlyZW1lbnRzOgotICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMgY29uc3RhbnQuCi0KLSAgICBA
bGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGBlbmQo
KWAuLGVuZH0KLQotICAgIEBzYSBAcmVmIGNlbmQoKSAtLSByZXR1cm5zIGEgY29uc3QgaXRlcmF0
b3IgdG8gdGhlIGVuZAotICAgIEBzYSBAcmVmIGJlZ2luKCkgLS0gcmV0dXJucyBhbiBpdGVyYXRv
ciB0byB0aGUgYmVnaW5uaW5nCi0gICAgQHNhIEByZWYgY2JlZ2luKCkgLS0gcmV0dXJucyBhIGNv
bnN0IGl0ZXJhdG9yIHRvIHRoZSBiZWdpbm5pbmcKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4w
Ci0gICAgKi8KLSAgICBpdGVyYXRvciBlbmQoKSBub2V4Y2VwdAotICAgIHsKLSAgICAgICAgaXRl
cmF0b3IgcmVzdWx0KHRoaXMpOwotICAgICAgICByZXN1bHQuc2V0X2VuZCgpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qIQotICAgIEBjb3B5ZG9jIGJhc2ljX2pzb246
OmNlbmQoKQotICAgICovCi0gICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qgbm9leGNlcHQK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjZW5kKCk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJy
aWVmIHJldHVybnMgYSBjb25zdCBpdGVyYXRvciB0byBvbmUgcGFzdCB0aGUgbGFzdCBlbGVtZW50
Ci0KLSAgICBSZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8gb25lIHBhc3QgdGhlIGxhc3QgZWxl
bWVudC4KLQotICAgIEBpbWFnZSBodG1sIHJhbmdlLWJlZ2luLWVuZC5zdmcgIklsbHVzdHJhdGlv
biBmcm9tIGNwcHJlZmVyZW5jZS5jb20iCi0KLSAgICBAcmV0dXJuIGNvbnN0IGl0ZXJhdG9yIG9u
ZSBwYXN0IHRoZSBsYXN0IGVsZW1lbnQKLQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgotCi0g
ICAgQHJlcXVpcmVtZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlp
bmcgdGhlCi0gICAgW0NvbnRhaW5lcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAv
Y29uY2VwdC9Db250YWluZXIpCi0gICAgcmVxdWlyZW1lbnRzOgotICAgIC0gVGhlIGNvbXBsZXhp
dHkgaXMgY29uc3RhbnQuCi0gICAgLSBIYXMgdGhlIHNlbWFudGljcyBvZiBgY29uc3RfY2FzdDxj
b25zdCBiYXNpY19qc29uJj4oKnRoaXMpLmVuZCgpYC4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUg
Zm9sbG93aW5nIGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgYGNlbmQoKWAuLGNlbmR9Ci0KLSAg
ICBAc2EgQHJlZiBlbmQoKSAtLSByZXR1cm5zIGFuIGl0ZXJhdG9yIHRvIHRoZSBlbmQKLSAgICBA
c2EgQHJlZiBiZWdpbigpIC0tIHJldHVybnMgYW4gaXRlcmF0b3IgdG8gdGhlIGJlZ2lubmluZwot
ICAgIEBzYSBAcmVmIGNiZWdpbigpIC0tIHJldHVybnMgYSBjb25zdCBpdGVyYXRvciB0byB0aGUg
YmVnaW5uaW5nCi0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAgY29uc3Rf
aXRlcmF0b3IgY2VuZCgpIGNvbnN0IG5vZXhjZXB0Ci0gICAgewotICAgICAgICBjb25zdF9pdGVy
YXRvciByZXN1bHQodGhpcyk7Ci0gICAgICAgIHJlc3VsdC5zZXRfZW5kKCk7Ci0gICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIHJldHVybnMgYW4gaXRl
cmF0b3IgdG8gdGhlIHJldmVyc2UtYmVnaW5uaW5nCi0KLSAgICBSZXR1cm5zIGFuIGl0ZXJhdG9y
IHRvIHRoZSByZXZlcnNlLWJlZ2lubmluZzsgdGhhdCBpcywgdGhlIGxhc3QgZWxlbWVudC4KLQot
ICAgIEBpbWFnZSBodG1sIHJhbmdlLXJiZWdpbi1yZW5kLnN2ZyAiSWxsdXN0cmF0aW9uIGZyb20g
Y3BwcmVmZXJlbmNlLmNvbSIKLQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgotCi0gICAgQHJl
cXVpcmVtZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlpbmcgdGhl
Ci0gICAgW1JldmVyc2libGVDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cv
Y3BwL2NvbmNlcHQvUmV2ZXJzaWJsZUNvbnRhaW5lcikKLSAgICByZXF1aXJlbWVudHM6Ci0gICAg
LSBUaGUgY29tcGxleGl0eSBpcyBjb25zdGFudC4KLSAgICAtIEhhcyB0aGUgc2VtYW50aWNzIG9m
IGByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKWAuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxv
d2luZyBjb2RlIHNob3dzIGFuIGV4YW1wbGUgZm9yIGByYmVnaW4oKWAuLHJiZWdpbn0KLQotICAg
IEBzYSBAcmVmIGNyYmVnaW4oKSAtLSByZXR1cm5zIGEgY29uc3QgcmV2ZXJzZSBpdGVyYXRvciB0
byB0aGUgYmVnaW5uaW5nCi0gICAgQHNhIEByZWYgcmVuZCgpIC0tIHJldHVybnMgYSByZXZlcnNl
IGl0ZXJhdG9yIHRvIHRoZSBlbmQKLSAgICBAc2EgQHJlZiBjcmVuZCgpIC0tIHJldHVybnMgYSBj
b25zdCByZXZlcnNlIGl0ZXJhdG9yIHRvIHRoZSBlbmQKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEu
MC4wCi0gICAgKi8KLSAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIG5vZXhjZXB0Ci0gICAg
ewotICAgICAgICByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7Ci0gICAgfQotCi0gICAg
LyohCi0gICAgQGNvcHlkb2MgYmFzaWNfanNvbjo6Y3JiZWdpbigpCi0gICAgKi8KLSAgICBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IG5vZXhjZXB0Ci0gICAgewotICAgICAg
ICByZXR1cm4gY3JiZWdpbigpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiByZXR1cm5z
IGFuIGl0ZXJhdG9yIHRvIHRoZSByZXZlcnNlLWVuZAotCi0gICAgUmV0dXJucyBhbiBpdGVyYXRv
ciB0byB0aGUgcmV2ZXJzZS1lbmQ7IHRoYXQgaXMsIG9uZSBiZWZvcmUgdGhlIGZpcnN0Ci0gICAg
ZWxlbWVudC4KLQotICAgIEBpbWFnZSBodG1sIHJhbmdlLXJiZWdpbi1yZW5kLnN2ZyAiSWxsdXN0
cmF0aW9uIGZyb20gY3BwcmVmZXJlbmNlLmNvbSIKLQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50
LgotCi0gICAgQHJlcXVpcmVtZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNh
dGlzZnlpbmcgdGhlCi0gICAgW1JldmVyc2libGVDb250YWluZXJdKGh0dHA6Ly9lbi5jcHByZWZl
cmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvUmV2ZXJzaWJsZUNvbnRhaW5lcikKLSAgICByZXF1aXJl
bWVudHM6Ci0gICAgLSBUaGUgY29tcGxleGl0eSBpcyBjb25zdGFudC4KLSAgICAtIEhhcyB0aGUg
c2VtYW50aWNzIG9mIGByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpYC4KLQotICAgIEBsaXZlZXhh
bXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgYHJlbmQoKWAuLHJl
bmR9Ci0KLSAgICBAc2EgQHJlZiBjcmVuZCgpIC0tIHJldHVybnMgYSBjb25zdCByZXZlcnNlIGl0
ZXJhdG9yIHRvIHRoZSBlbmQKLSAgICBAc2EgQHJlZiByYmVnaW4oKSAtLSByZXR1cm5zIGEgcmV2
ZXJzZSBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5nCi0gICAgQHNhIEByZWYgY3JiZWdpbigpIC0t
IHJldHVybnMgYSBjb25zdCByZXZlcnNlIGl0ZXJhdG9yIHRvIHRoZSBiZWdpbm5pbmcKLQotICAg
IEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQo
KSBub2V4Y2VwdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4o
KSk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGNvcHlkb2MgYmFzaWNfanNvbjo6Y3JlbmQoKQot
ICAgICovCi0gICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3Qgbm9leGNlcHQK
LSAgICB7Ci0gICAgICAgIHJldHVybiBjcmVuZCgpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBi
cmllZiByZXR1cm5zIGEgY29uc3QgcmV2ZXJzZSBpdGVyYXRvciB0byB0aGUgbGFzdCBlbGVtZW50
Ci0KLSAgICBSZXR1cm5zIGEgY29uc3QgaXRlcmF0b3IgdG8gdGhlIHJldmVyc2UtYmVnaW5uaW5n
OyB0aGF0IGlzLCB0aGUgbGFzdAotICAgIGVsZW1lbnQuCi0KLSAgICBAaW1hZ2UgaHRtbCByYW5n
ZS1yYmVnaW4tcmVuZC5zdmcgIklsbHVzdHJhdGlvbiBmcm9tIGNwcHJlZmVyZW5jZS5jb20iCi0K
LSAgICBAY29tcGxleGl0eSBDb25zdGFudC4KLQotICAgIEByZXF1aXJlbWVudCBUaGlzIGZ1bmN0
aW9uIGhlbHBzIGBiYXNpY19qc29uYCBzYXRpc2Z5aW5nIHRoZQotICAgIFtSZXZlcnNpYmxlQ29u
dGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25jZXB0L1JldmVyc2li
bGVDb250YWluZXIpCi0gICAgcmVxdWlyZW1lbnRzOgotICAgIC0gVGhlIGNvbXBsZXhpdHkgaXMg
Y29uc3RhbnQuCi0gICAgLSBIYXMgdGhlIHNlbWFudGljcyBvZiBgY29uc3RfY2FzdDxjb25zdCBi
YXNpY19qc29uJj4oKnRoaXMpLnJiZWdpbigpYC4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9s
bG93aW5nIGNvZGUgc2hvd3MgYW4gZXhhbXBsZSBmb3IgYGNyYmVnaW4oKWAuLGNyYmVnaW59Ci0K
LSAgICBAc2EgQHJlZiByYmVnaW4oKSAtLSByZXR1cm5zIGEgcmV2ZXJzZSBpdGVyYXRvciB0byB0
aGUgYmVnaW5uaW5nCi0gICAgQHNhIEByZWYgcmVuZCgpIC0tIHJldHVybnMgYSByZXZlcnNlIGl0
ZXJhdG9yIHRvIHRoZSBlbmQKLSAgICBAc2EgQHJlZiBjcmVuZCgpIC0tIHJldHVybnMgYSBjb25z
dCByZXZlcnNlIGl0ZXJhdG9yIHRvIHRoZSBlbmQKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4w
Ci0gICAgKi8KLSAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNyYmVnaW4oKSBjb25zdCBub2V4
Y2VwdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoY2VuZCgp
KTsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgcmV0dXJucyBhIGNvbnN0IHJldmVyc2Ug
aXRlcmF0b3IgdG8gb25lIGJlZm9yZSB0aGUgZmlyc3QKLQotICAgIFJldHVybnMgYSBjb25zdCBy
ZXZlcnNlIGl0ZXJhdG9yIHRvIHRoZSByZXZlcnNlLWVuZDsgdGhhdCBpcywgb25lIGJlZm9yZQot
ICAgIHRoZSBmaXJzdCBlbGVtZW50LgotCi0gICAgQGltYWdlIGh0bWwgcmFuZ2UtcmJlZ2luLXJl
bmQuc3ZnICJJbGx1c3RyYXRpb24gZnJvbSBjcHByZWZlcmVuY2UuY29tIgotCi0gICAgQGNvbXBs
ZXhpdHkgQ29uc3RhbnQuCi0KLSAgICBAcmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBg
YmFzaWNfanNvbmAgc2F0aXNmeWluZyB0aGUKLSAgICBbUmV2ZXJzaWJsZUNvbnRhaW5lcl0oaHR0
cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvY29uY2VwdC9SZXZlcnNpYmxlQ29udGFpbmVy
KQotICAgIHJlcXVpcmVtZW50czoKLSAgICAtIFRoZSBjb21wbGV4aXR5IGlzIGNvbnN0YW50Lgot
ICAgIC0gSGFzIHRoZSBzZW1hbnRpY3Mgb2YgYGNvbnN0X2Nhc3Q8Y29uc3QgYmFzaWNfanNvbiY+
KCp0aGlzKS5yZW5kKClgLgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBz
aG93cyBhbiBleGFtcGxlIGZvciBgY3JlbmQoKWAuLGNyZW5kfQotCi0gICAgQHNhIEByZWYgcmVu
ZCgpIC0tIHJldHVybnMgYSByZXZlcnNlIGl0ZXJhdG9yIHRvIHRoZSBlbmQKLSAgICBAc2EgQHJl
ZiByYmVnaW4oKSAtLSByZXR1cm5zIGEgcmV2ZXJzZSBpdGVyYXRvciB0byB0aGUgYmVnaW5uaW5n
Ci0gICAgQHNhIEByZWYgY3JiZWdpbigpIC0tIHJldHVybnMgYSBjb25zdCByZXZlcnNlIGl0ZXJh
dG9yIHRvIHRoZSBiZWdpbm5pbmcKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8K
LSAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNyZW5kKCkgY29uc3Qgbm9leGNlcHQKLSAgICB7
Ci0gICAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGNiZWdpbigpKTsKLSAgICB9
Ci0KLSAgcHJpdmF0ZToKLSAgICAvLyBmb3J3YXJkIGRlY2xhcmF0aW9uCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgSXRlcmF0b3JUeXBlPiBjbGFzcyBpdGVyYXRpb25fcHJveHk7Ci0KLSAgcHVibGlj
OgotICAgIC8qIQotICAgIEBicmllZiB3cmFwcGVyIHRvIGFjY2VzcyBpdGVyYXRvciBtZW1iZXIg
ZnVuY3Rpb25zIGluIHJhbmdlLWJhc2VkIGZvcgotCi0gICAgVGhpcyBmdW5jdGlvbiBhbGxvd3Mg
dG8gYWNjZXNzIEByZWYgaXRlcmF0b3I6OmtleSgpIGFuZCBAcmVmCi0gICAgaXRlcmF0b3I6OnZh
bHVlKCkgZHVyaW5nIHJhbmdlLWJhc2VkIGZvciBsb29wcy4gSW4gdGhlc2UgbG9vcHMsIGEKLSAg
ICByZWZlcmVuY2UgdG8gdGhlIEpTT04gdmFsdWVzIGlzIHJldHVybmVkLCBzbyB0aGVyZSBpcyBu
byBhY2Nlc3MgdG8gdGhlCi0gICAgdW5kZXJseWluZyBpdGVyYXRvci4KLQotICAgIEBub3RlIFRo
ZSBuYW1lIG9mIHRoaXMgZnVuY3Rpb24gaXMgbm90IHlldCBmaW5hbCBhbmQgbWF5IGNoYW5nZSBp
biB0aGUKLSAgICBmdXR1cmUuCi0gICAgKi8KLSAgICBzdGF0aWMgaXRlcmF0aW9uX3Byb3h5PGl0
ZXJhdG9yPiBpdGVyYXRvcl93cmFwcGVyKHJlZmVyZW5jZSBjb250KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGl0ZXJhdGlvbl9wcm94eTxpdGVyYXRvcj4oY29udCk7Ci0gICAgfQotCi0gICAgLyoh
Ci0gICAgQGNvcHlkb2MgaXRlcmF0b3Jfd3JhcHBlcihyZWZlcmVuY2UpCi0gICAgKi8KLSAgICBz
dGF0aWMgaXRlcmF0aW9uX3Byb3h5PGNvbnN0X2l0ZXJhdG9yPiBpdGVyYXRvcl93cmFwcGVyKGNv
bnN0X3JlZmVyZW5jZSBjb250KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGl0ZXJhdGlvbl9wcm94
eTxjb25zdF9pdGVyYXRvcj4oY29udCk7Ci0gICAgfQotCi0gICAgLy8vIEB9Ci0KLQotICAgIC8v
Ly8vLy8vLy8vLy8vCi0gICAgLy8gY2FwYWNpdHkgLy8KLSAgICAvLy8vLy8vLy8vLy8vLwotCi0g
ICAgLy8vIEBuYW1lIGNhcGFjaXR5Ci0gICAgLy8vIEB7Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYg
Y2hlY2tzIHdoZXRoZXIgdGhlIGNvbnRhaW5lciBpcyBlbXB0eQotCi0gICAgQ2hlY2tzIGlmIGEg
SlNPTiB2YWx1ZSBoYXMgbm8gZWxlbWVudHMuCi0KLSAgICBAcmV0dXJuIFRoZSByZXR1cm4gdmFs
dWUgZGVwZW5kcyBvbiB0aGUgZGlmZmVyZW50IHR5cGVzIGFuZCBpcwotICAgICAgICAgICAgZGVm
aW5lZCBhcyBmb2xsb3dzOgotICAgICAgICAgICAgVmFsdWUgdHlwZSAgfCByZXR1cm4gdmFsdWUK
LSAgICAgICAgICAgIC0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLQotICAgICAgICAgICAgbnVs
bCAgICAgICAgfCBgdHJ1ZWAKLSAgICAgICAgICAgIGJvb2xlYW4gICAgIHwgYGZhbHNlYAotICAg
ICAgICAgICAgc3RyaW5nICAgICAgfCBgZmFsc2VgCi0gICAgICAgICAgICBudW1iZXIgICAgICB8
IGBmYWxzZWAKLSAgICAgICAgICAgIG9iamVjdCAgICAgIHwgcmVzdWx0IG9mIGZ1bmN0aW9uIGBv
YmplY3RfdDo6ZW1wdHkoKWAKLSAgICAgICAgICAgIGFycmF5ICAgICAgIHwgcmVzdWx0IG9mIGZ1
bmN0aW9uIGBhcnJheV90OjplbXB0eSgpYAotCi0gICAgQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2Vz
IG5vdCByZXR1cm4gd2hldGhlciBhIHN0cmluZyBzdG9yZWQgYXMgSlNPTiB2YWx1ZQotICAgIGlz
IGVtcHR5IC0gaXQgcmV0dXJucyB3aGV0aGVyIHRoZSBKU09OIGNvbnRhaW5lciBpdHNlbGYgaXMg
ZW1wdHkgd2hpY2ggaXMKLSAgICBmYWxzZSBpbiB0aGUgY2FzZSBvZiBhIHN0cmluZy4KLQotICAg
IEBjb21wbGV4aXR5IENvbnN0YW50LCBhcyBsb25nIGFzIEByZWYgYXJyYXlfdCBhbmQgQHJlZiBv
YmplY3RfdCBzYXRpc2Z5Ci0gICAgdGhlIENvbnRhaW5lciBjb25jZXB0OyB0aGF0IGlzLCB0aGVp
ciBgZW1wdHkoKWAgZnVuY3Rpb25zIGhhdmUgY29uc3RhbnQKLSAgICBjb21wbGV4aXR5LgotCi0g
ICAgQHJlcXVpcmVtZW50IFRoaXMgZnVuY3Rpb24gaGVscHMgYGJhc2ljX2pzb25gIHNhdGlzZnlp
bmcgdGhlCi0gICAgW0NvbnRhaW5lcl0oaHR0cDovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAv
Y29uY2VwdC9Db250YWluZXIpCi0gICAgcmVxdWlyZW1lbnRzOgotICAgIC0gVGhlIGNvbXBsZXhp
dHkgaXMgY29uc3RhbnQuCi0gICAgLSBIYXMgdGhlIHNlbWFudGljcyBvZiBgYmVnaW4oKSA9PSBl
bmQoKWAuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHVzZXMgYGVtcHR5
KClgIHRvIGNoZWNrIGlmIGEgSlNPTgotICAgIG9iamVjdCBjb250YWlucyBhbnkgZWxlbWVudHMu
LGVtcHR5fQotCi0gICAgQHNhIEByZWYgc2l6ZSgpIC0tIHJldHVybnMgdGhlIG51bWJlciBvZiBl
bGVtZW50cwotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIGJvb2wgZW1w
dHkoKSBjb25zdCBub2V4Y2VwdAotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVsbDoKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyBudWxsIHZhbHVlcyBhcmUgZW1wdHkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojph
cnJheToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBkZWxlZ2F0ZSBjYWxsIHRv
IGFycmF5X3Q6OmVtcHR5KCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV92YWx1ZS5hcnJheS0+
ZW1wdHkoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmpl
Y3Q6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gZGVsZWdhdGUgY2FsbCB0byBv
YmplY3RfdDo6ZW1wdHkoKQotICAgICAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLm9iamVjdC0+
ZW1wdHkoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAvLyBhbGwgb3RoZXIgdHlwZXMgYXJlIG5vbmVtcHR5Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIHJldHVybnMgdGhlIG51bWJlciBvZiBlbGVtZW50
cwotCi0gICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgSlNPTiB2YWx1ZS4K
LQotICAgIEByZXR1cm4gVGhlIHJldHVybiB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBkaWZmZXJlbnQg
dHlwZXMgYW5kIGlzCi0gICAgICAgICAgICBkZWZpbmVkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAg
ICBWYWx1ZSB0eXBlICB8IHJldHVybiB2YWx1ZQotICAgICAgICAgICAgLS0tLS0tLS0tLS0gfCAt
LS0tLS0tLS0tLS0tCi0gICAgICAgICAgICBudWxsICAgICAgICB8IGAwYAotICAgICAgICAgICAg
Ym9vbGVhbiAgICAgfCBgMWAKLSAgICAgICAgICAgIHN0cmluZyAgICAgIHwgYDFgCi0gICAgICAg
ICAgICBudW1iZXIgICAgICB8IGAxYAotICAgICAgICAgICAgb2JqZWN0ICAgICAgfCByZXN1bHQg
b2YgZnVuY3Rpb24gb2JqZWN0X3Q6OnNpemUoKQotICAgICAgICAgICAgYXJyYXkgICAgICAgfCBy
ZXN1bHQgb2YgZnVuY3Rpb24gYXJyYXlfdDo6c2l6ZSgpCi0KLSAgICBAbm90ZSBUaGlzIGZ1bmN0
aW9uIGRvZXMgbm90IHJldHVybiB0aGUgbGVuZ3RoIG9mIGEgc3RyaW5nIHN0b3JlZCBhcyBKU09O
Ci0gICAgdmFsdWUgLSBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIEpT
T04gdmFsdWUgd2hpY2ggaXMgMSBpbgotICAgIHRoZSBjYXNlIG9mIGEgc3RyaW5nLgotCi0gICAg
QGNvbXBsZXhpdHkgQ29uc3RhbnQsIGFzIGxvbmcgYXMgQHJlZiBhcnJheV90IGFuZCBAcmVmIG9i
amVjdF90IHNhdGlzZnkKLSAgICB0aGUgQ29udGFpbmVyIGNvbmNlcHQ7IHRoYXQgaXMsIHRoZWly
IHNpemUoKSBmdW5jdGlvbnMgaGF2ZSBjb25zdGFudAotICAgIGNvbXBsZXhpdHkuCi0KLSAgICBA
cmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNmeWluZyB0
aGUKLSAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9jb25j
ZXB0L0NvbnRhaW5lcikKLSAgICByZXF1aXJlbWVudHM6Ci0gICAgLSBUaGUgY29tcGxleGl0eSBp
cyBjb25zdGFudC4KLSAgICAtIEhhcyB0aGUgc2VtYW50aWNzIG9mIGBzdGQ6OmRpc3RhbmNlKGJl
Z2luKCksIGVuZCgpKWAuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGNh
bGxzIGBzaXplKClgIG9uIHRoZSBkaWZmZXJlbnQgdmFsdWUKLSAgICB0eXBlcy4sc2l6ZX0KLQot
ICAgIEBzYSBAcmVmIGVtcHR5KCkgLS0gY2hlY2tzIHdoZXRoZXIgdGhlIGNvbnRhaW5lciBpcyBl
bXB0eQotICAgIEBzYSBAcmVmIG1heF9zaXplKCkgLS0gcmV0dXJucyB0aGUgbWF4aW1hbCBudW1i
ZXIgb2YgZWxlbWVudHMKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICBz
aXplX3R5cGUgc2l6ZSgpIGNvbnN0IG5vZXhjZXB0Ci0gICAgewotICAgICAgICBzd2l0Y2ggKG1f
dHlwZSkKLSAgICAgICAgewotICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudWxsOgotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIC8vIG51bGwgdmFsdWVzIGFyZSBlbXB0eQotICAgICAg
ICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIHZh
bHVlX3Q6OmFycmF5OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGRlbGVnYXRl
IGNhbGwgdG8gYXJyYXlfdDo6c2l6ZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUu
YXJyYXktPnNpemUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2YWx1ZV90
OjpvYmplY3Q6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gZGVsZWdhdGUgY2Fs
bCB0byBvYmplY3RfdDo6c2l6ZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUub2Jq
ZWN0LT5zaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gYWxsIG90aGVyIHR5cGVzIGhhdmUgc2l6ZSAx
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgcmV0dXJucyB0aGUgbWF4aW11bSBwb3NzaWJsZSBu
dW1iZXIgb2YgZWxlbWVudHMKLQotICAgIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGVs
ZW1lbnRzIGEgSlNPTiB2YWx1ZSBpcyBhYmxlIHRvIGhvbGQgZHVlIHRvCi0gICAgc3lzdGVtIG9y
IGxpYnJhcnkgaW1wbGVtZW50YXRpb24gbGltaXRhdGlvbnMsIGkuZS4gYHN0ZDo6ZGlzdGFuY2Uo
YmVnaW4oKSwKLSAgICBlbmQoKSlgIGZvciB0aGUgSlNPTiB2YWx1ZS4KLQotICAgIEByZXR1cm4g
VGhlIHJldHVybiB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBkaWZmZXJlbnQgdHlwZXMgYW5kIGlzCi0g
ICAgICAgICAgICBkZWZpbmVkIGFzIGZvbGxvd3M6Ci0gICAgICAgICAgICBWYWx1ZSB0eXBlICB8
IHJldHVybiB2YWx1ZQotICAgICAgICAgICAgLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tCi0g
ICAgICAgICAgICBudWxsICAgICAgICB8IGAwYCAoc2FtZSBhcyBgc2l6ZSgpYCkKLSAgICAgICAg
ICAgIGJvb2xlYW4gICAgIHwgYDFgIChzYW1lIGFzIGBzaXplKClgKQotICAgICAgICAgICAgc3Ry
aW5nICAgICAgfCBgMWAgKHNhbWUgYXMgYHNpemUoKWApCi0gICAgICAgICAgICBudW1iZXIgICAg
ICB8IGAxYCAoc2FtZSBhcyBgc2l6ZSgpYCkKLSAgICAgICAgICAgIG9iamVjdCAgICAgIHwgcmVz
dWx0IG9mIGZ1bmN0aW9uIGBvYmplY3RfdDo6bWF4X3NpemUoKWAKLSAgICAgICAgICAgIGFycmF5
ICAgICAgIHwgcmVzdWx0IG9mIGZ1bmN0aW9uIGBhcnJheV90OjptYXhfc2l6ZSgpYAotCi0gICAg
QGNvbXBsZXhpdHkgQ29uc3RhbnQsIGFzIGxvbmcgYXMgQHJlZiBhcnJheV90IGFuZCBAcmVmIG9i
amVjdF90IHNhdGlzZnkKLSAgICB0aGUgQ29udGFpbmVyIGNvbmNlcHQ7IHRoYXQgaXMsIHRoZWly
IGBtYXhfc2l6ZSgpYCBmdW5jdGlvbnMgaGF2ZSBjb25zdGFudAotICAgIGNvbXBsZXhpdHkuCi0K
LSAgICBAcmVxdWlyZW1lbnQgVGhpcyBmdW5jdGlvbiBoZWxwcyBgYmFzaWNfanNvbmAgc2F0aXNm
eWluZyB0aGUKLSAgICBbQ29udGFpbmVyXShodHRwOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2Nw
cC9jb25jZXB0L0NvbnRhaW5lcikKLSAgICByZXF1aXJlbWVudHM6Ci0gICAgLSBUaGUgY29tcGxl
eGl0eSBpcyBjb25zdGFudC4KLSAgICAtIEhhcyB0aGUgc2VtYW50aWNzIG9mIHJldHVybmluZyBg
Yi5zaXplKClgIHdoZXJlIGBiYCBpcyB0aGUgbGFyZ2VzdAotICAgICAgcG9zc2libGUgSlNPTiB2
YWx1ZS4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgY2FsbHMgYG1heF9z
aXplKClgIG9uIHRoZSBkaWZmZXJlbnQgdmFsdWUKLSAgICB0eXBlcy4gTm90ZSB0aGUgb3V0cHV0
IGlzIGltcGxlbWVudGF0aW9uIHNwZWNpZmljLixtYXhfc2l6ZX0KLQotICAgIEBzYSBAcmVmIHNp
emUoKSAtLSByZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMKLQotICAgIEBzaW5jZSB2ZXJz
aW9uIDEuMC4wCi0gICAgKi8KLSAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCBub2V4Y2Vw
dAotICAgIHsKLSAgICAgICAgc3dpdGNoIChtX3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGNhc2UgdmFsdWVfdDo6YXJyYXk6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8g
ZGVsZWdhdGUgY2FsbCB0byBhcnJheV90OjptYXhfc2l6ZSgpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG1fdmFsdWUuYXJyYXktPm1heF9zaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IC8vIGRlbGVnYXRlIGNhbGwgdG8gb2JqZWN0X3Q6Om1heF9zaXplKCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbV92YWx1ZS5vYmplY3QtPm1heF9zaXplKCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gYWxs
IG90aGVyIHR5cGVzIGhhdmUgbWF4X3NpemUoKSA9PSBzaXplKCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gc2l6ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8v
IEB9Ci0KLQotICAgIC8vLy8vLy8vLy8vLy8vLwotICAgIC8vIG1vZGlmaWVycyAvLwotICAgIC8v
Ly8vLy8vLy8vLy8vLwotCi0gICAgLy8vIEBuYW1lIG1vZGlmaWVycwotICAgIC8vLyBAewotCi0g
ICAgLyohCi0gICAgQGJyaWVmIGNsZWFycyB0aGUgY29udGVudHMKLQotICAgIENsZWFycyB0aGUg
Y29udGVudCBvZiBhIEpTT04gdmFsdWUgYW5kIHJlc2V0cyBpdCB0byB0aGUgZGVmYXVsdCB2YWx1
ZSBhcwotICAgIGlmIEByZWYgYmFzaWNfanNvbih2YWx1ZV90KSB3b3VsZCBoYXZlIGJlZW4gY2Fs
bGVkOgotCi0gICAgVmFsdWUgdHlwZSAgfCBpbml0aWFsIHZhbHVlCi0gICAgLS0tLS0tLS0tLS0g
fCAtLS0tLS0tLS0tLS0tCi0gICAgbnVsbCAgICAgICAgfCBgbnVsbGAKLSAgICBib29sZWFuICAg
ICB8IGBmYWxzZWAKLSAgICBzdHJpbmcgICAgICB8IGAiImAKLSAgICBudW1iZXIgICAgICB8IGAw
YAotICAgIG9iamVjdCAgICAgIHwgYHt9YAotICAgIGFycmF5ICAgICAgIHwgYFtdYAotCi0gICAg
QGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBKU09OIHZhbHVlLgotCi0gICAg
QGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIHRoZSBlZmZlY3Qgb2YgYGNsZWFy
KClgIHRvIGRpZmZlcmVudAotICAgIEpTT04gdHlwZXMuLGNsZWFyfQotCi0gICAgQHNpbmNlIHZl
cnNpb24gMS4wLjAKLSAgICAqLwotICAgIHZvaWQgY2xlYXIoKSBub2V4Y2VwdAotICAgIHsKLSAg
ICAgICAgc3dpdGNoIChtX3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNhc2UgdmFsdWVf
dDo6bnVtYmVyX2ludGVnZXI6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV92YWx1
ZS5udW1iZXJfaW50ZWdlciA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIG1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkID0gMDsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2
YWx1ZV90OjpudW1iZXJfZmxvYXQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV92
YWx1ZS5udW1iZXJfZmxvYXQgPSAwLjA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBtX3ZhbHVlLmJvb2xlYW4gPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpz
dHJpbmc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS5zdHJpbmctPmNs
ZWFyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
bV92YWx1ZS5hcnJheS0+Y2xlYXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6Ci0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgbV92YWx1ZS5vYmplY3QtPmNsZWFyKCk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgYWRkIGFuIG9iamVjdCB0byBhbiBhcnJheQot
Ci0gICAgQXBwZW5kcyB0aGUgZ2l2ZW4gZWxlbWVudCBAYSB2YWwgdG8gdGhlIGVuZCBvZiB0aGUg
SlNPTiB2YWx1ZS4gSWYgdGhlCi0gICAgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGEgSlNPTiBudWxs
IHZhbHVlLCBhbiBlbXB0eSBhcnJheSBpcyBjcmVhdGVkIGJlZm9yZQotICAgIGFwcGVuZGluZyBA
YSB2YWwuCi0KLSAgICBAcGFyYW1baW5dIHZhbCB0aGUgdmFsdWUgdG8gYWRkIHRvIHRoZSBKU09O
IGFycmF5Ci0KLSAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3Igd2hlbiBjYWxsZWQgb24gYSB0
eXBlIG90aGVyIHRoYW4gSlNPTiBhcnJheSBvcgotICAgIG51bGw7IGV4YW1wbGU6IGAiY2Fubm90
IHVzZSBwdXNoX2JhY2soKSB3aXRoIG51bWJlciJgCi0KLSAgICBAY29tcGxleGl0eSBBbW9ydGl6
ZWQgY29uc3RhbnQuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgaG93IGBw
dXNoX2JhY2soKWAgYW5kIGArPWAgY2FuIGJlIHVzZWQgdG8KLSAgICBhZGQgZWxlbWVudHMgdG8g
YSBKU09OIGFycmF5LiBOb3RlIGhvdyB0aGUgYG51bGxgIHZhbHVlIHdhcyBzaWxlbnRseQotICAg
IGNvbnZlcnRlZCB0byBhIEpTT04gYXJyYXkuLHB1c2hfYmFja30KLQotICAgIEBzaW5jZSB2ZXJz
aW9uIDEuMC4wCi0gICAgKi8KLSAgICB2b2lkIHB1c2hfYmFjayhiYXNpY19qc29uJiYgdmFsKQot
ICAgIHsKLSAgICAgICAgLy8gcHVzaF9iYWNrIG9ubHkgd29ya3MgZm9yIG51bGwgb2JqZWN0cyBv
ciBhcnJheXMKLSAgICAgICAgaWYgKG5vdChpc19udWxsKCkgb3IgaXNfYXJyYXkoKSkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjpkb21haW5fZXJyb3IoImNhbm5vdCB1
c2UgcHVzaF9iYWNrKCkgd2l0aCAiICsgdHlwZV9uYW1lKCkpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIHRyYW5zZm9ybSBudWxsIG9iamVjdCBpbnRvIGFuIGFycmF5Ci0gICAgICAgIGlmIChp
c19udWxsKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fdHlwZSA9IHZhbHVlX3Q6OmFycmF5
OwotICAgICAgICAgICAgbV92YWx1ZSA9IHZhbHVlX3Q6OmFycmF5OwotICAgICAgICAgICAgYXNz
ZXJ0X2ludmFyaWFudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYWRkIGVsZW1lbnQgdG8g
YXJyYXkgKG1vdmUgc2VtYW50aWNzKQotICAgICAgICBtX3ZhbHVlLmFycmF5LT5wdXNoX2JhY2so
c3RkOjptb3ZlKHZhbCkpOwotICAgICAgICAvLyBpbnZhbGlkYXRlIG9iamVjdAotICAgICAgICB2
YWwubV90eXBlID0gdmFsdWVfdDo6bnVsbDsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYg
YWRkIGFuIG9iamVjdCB0byBhbiBhcnJheQotICAgIEBjb3B5ZG9jIHB1c2hfYmFjayhiYXNpY19q
c29uJiYpCi0gICAgKi8KLSAgICByZWZlcmVuY2Ugb3BlcmF0b3IrPShiYXNpY19qc29uJiYgdmFs
KQotICAgIHsKLSAgICAgICAgcHVzaF9iYWNrKHN0ZDo6bW92ZSh2YWwpKTsKLSAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBhZGQgYW4gb2JqZWN0IHRv
IGFuIGFycmF5Ci0gICAgQGNvcHlkb2MgcHVzaF9iYWNrKGJhc2ljX2pzb24mJikKLSAgICAqLwot
ICAgIHZvaWQgcHVzaF9iYWNrKGNvbnN0IGJhc2ljX2pzb24mIHZhbCkKLSAgICB7Ci0gICAgICAg
IC8vIHB1c2hfYmFjayBvbmx5IHdvcmtzIGZvciBudWxsIG9iamVjdHMgb3IgYXJyYXlzCi0gICAg
ICAgIGlmIChub3QoaXNfbnVsbCgpIG9yIGlzX2FycmF5KCkpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9tYWluX2Vycm9yKCJjYW5ub3QgdXNlIHB1c2hfYmFjaygp
IHdpdGggIiArIHR5cGVfbmFtZSgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyB0cmFuc2Zv
cm0gbnVsbCBvYmplY3QgaW50byBhbiBhcnJheQotICAgICAgICBpZiAoaXNfbnVsbCgpKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX3R5cGUgPSB2YWx1ZV90OjphcnJheTsKLSAgICAgICAgICAg
IG1fdmFsdWUgPSB2YWx1ZV90OjphcnJheTsKLSAgICAgICAgICAgIGFzc2VydF9pbnZhcmlhbnQo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGFkZCBlbGVtZW50IHRvIGFycmF5Ci0gICAgICAg
IG1fdmFsdWUuYXJyYXktPnB1c2hfYmFjayh2YWwpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBi
cmllZiBhZGQgYW4gb2JqZWN0IHRvIGFuIGFycmF5Ci0gICAgQGNvcHlkb2MgcHVzaF9iYWNrKGJh
c2ljX2pzb24mJikKLSAgICAqLwotICAgIHJlZmVyZW5jZSBvcGVyYXRvcis9KGNvbnN0IGJhc2lj
X2pzb24mIHZhbCkKLSAgICB7Ci0gICAgICAgIHB1c2hfYmFjayh2YWwpOwotICAgICAgICByZXR1
cm4gKnRoaXM7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIGFkZCBhbiBvYmplY3QgdG8g
YW4gb2JqZWN0Ci0KLSAgICBJbnNlcnRzIHRoZSBnaXZlbiBlbGVtZW50IEBhIHZhbCB0byB0aGUg
SlNPTiBvYmplY3QuIElmIHRoZSBmdW5jdGlvbiBpcwotICAgIGNhbGxlZCBvbiBhIEpTT04gbnVs
bCB2YWx1ZSwgYW4gZW1wdHkgb2JqZWN0IGlzIGNyZWF0ZWQgYmVmb3JlIGluc2VydGluZwotICAg
IEBhIHZhbC4KLQotICAgIEBwYXJhbVtpbl0gdmFsIHRoZSB2YWx1ZSB0byBhZGQgdG8gdGhlIEpT
T04gb2JqZWN0Ci0KLSAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3Igd2hlbiBjYWxsZWQgb24g
YSB0eXBlIG90aGVyIHRoYW4gSlNPTiBvYmplY3Qgb3IKLSAgICBudWxsOyBleGFtcGxlOiBgImNh
bm5vdCB1c2UgcHVzaF9iYWNrKCkgd2l0aCBudW1iZXIiYAotCi0gICAgQGNvbXBsZXhpdHkgTG9n
YXJpdGhtaWMgaW4gdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lciwgTyhsb2coYHNpemUoKWApKS4K
LQotICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBzaG93cyBob3cgYHB1c2hfYmFjaygpYCBh
bmQgYCs9YCBjYW4gYmUgdXNlZCB0bwotICAgIGFkZCBlbGVtZW50cyB0byBhIEpTT04gb2JqZWN0
LiBOb3RlIGhvdyB0aGUgYG51bGxgIHZhbHVlIHdhcyBzaWxlbnRseQotICAgIGNvbnZlcnRlZCB0
byBhIEpTT04gb2JqZWN0LixwdXNoX2JhY2tfX29iamVjdF90X192YWx1ZX0KLQotICAgIEBzaW5j
ZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICB2b2lkIHB1c2hfYmFjayhjb25zdCB0eXBlbmFt
ZSBvYmplY3RfdDo6dmFsdWVfdHlwZSYgdmFsKQotICAgIHsKLSAgICAgICAgLy8gcHVzaF9iYWNr
IG9ubHkgd29ya3MgZm9yIG51bGwgb2JqZWN0cyBvciBvYmplY3RzCi0gICAgICAgIGlmIChub3Qo
aXNfbnVsbCgpIG9yIGlzX29iamVjdCgpKSkKLSAgICAgICAgewotICAgICAgICAgICAgSlNPTl9U
SFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigiY2Fubm90IHVzZSBwdXNoX2JhY2soKSB3aXRoICIgKyB0
eXBlX25hbWUoKSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gdHJhbnNmb3JtIG51bGwgb2Jq
ZWN0IGludG8gYW4gb2JqZWN0Ci0gICAgICAgIGlmIChpc19udWxsKCkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fdHlwZSA9IHZhbHVlX3Q6Om9iamVjdDsKLSAgICAgICAgICAgIG1fdmFsdWUg
PSB2YWx1ZV90OjpvYmplY3Q7Ci0gICAgICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBhZGQgZWxlbWVudCB0byBhcnJheQotICAgICAgICBtX3ZhbHVl
Lm9iamVjdC0+aW5zZXJ0KHZhbCk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIGFkZCBh
biBvYmplY3QgdG8gYW4gb2JqZWN0Ci0gICAgQGNvcHlkb2MgcHVzaF9iYWNrKGNvbnN0IHR5cGVu
YW1lIG9iamVjdF90Ojp2YWx1ZV90eXBlJikKLSAgICAqLwotICAgIHJlZmVyZW5jZSBvcGVyYXRv
cis9KGNvbnN0IHR5cGVuYW1lIG9iamVjdF90Ojp2YWx1ZV90eXBlJiB2YWwpCi0gICAgewotICAg
ICAgICBwdXNoX2JhY2sodmFsKTsKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAgIH0KLQotICAg
IC8qIQotICAgIEBicmllZiBhZGQgYW4gb2JqZWN0IHRvIGFuIG9iamVjdAotCi0gICAgVGhpcyBm
dW5jdGlvbiBhbGxvd3MgdG8gdXNlIGBwdXNoX2JhY2tgIHdpdGggYW4gaW5pdGlhbGl6ZXIgbGlz
dC4gSW4gY2FzZQotCi0gICAgMS4gdGhlIGN1cnJlbnQgdmFsdWUgaXMgYW4gb2JqZWN0LAotICAg
IDIuIHRoZSBpbml0aWFsaXplciBsaXN0IEBhIGluaXQgY29udGFpbnMgb25seSB0d28gZWxlbWVu
dHMsIGFuZAotICAgIDMuIHRoZSBmaXJzdCBlbGVtZW50IG9mIEBhIGluaXQgaXMgYSBzdHJpbmcs
Ci0KLSAgICBAYSBpbml0IGlzIGNvbnZlcnRlZCBpbnRvIGFuIG9iamVjdCBlbGVtZW50IGFuZCBh
ZGRlZCB1c2luZwotICAgIEByZWYgcHVzaF9iYWNrKGNvbnN0IHR5cGVuYW1lIG9iamVjdF90Ojp2
YWx1ZV90eXBlJikuIE90aGVyd2lzZSwgQGEgaW5pdAotICAgIGlzIGNvbnZlcnRlZCB0byBhIEpT
T04gdmFsdWUgYW5kIGFkZGVkIHVzaW5nIEByZWYgcHVzaF9iYWNrKGJhc2ljX2pzb24mJikuCi0K
LSAgICBAcGFyYW0gaW5pdCAgYW4gaW5pdGlhbGl6ZXIgbGlzdAotCi0gICAgQGNvbXBsZXhpdHkg
TGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBpbml0aWFsaXplciBsaXN0IEBhIGluaXQuCi0KLSAg
ICBAbm90ZSBUaGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIHRvIHJlc29sdmUgYW4gYW1iaWd1b3Vz
IG92ZXJsb2FkIGVycm9yLAotICAgICAgICAgIGJlY2F1c2UgcGFpcnMgbGlrZSBgeyJrZXkiLCAi
dmFsdWUifWAgY2FuIGJlIGJvdGggaW50ZXJwcmV0ZWQgYXMKLSAgICAgICAgICBgb2JqZWN0X3Q6
OnZhbHVlX3R5cGVgIG9yIGBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8YmFzaWNfanNvbj5gLCBzZWUK
LSAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNvbi9pc3N1ZXMvMjM1IGZv
ciBtb3JlIGluZm9ybWF0aW9uLgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dz
IGhvdyBpbml0aWFsaXplciBsaXN0cyBhcmUgdHJlYXRlZCBhcwotICAgIG9iamVjdHMgd2hlbiBw
b3NzaWJsZS4scHVzaF9iYWNrX19pbml0aWFsaXplcl9saXN0fQotICAgICovCi0gICAgdm9pZCBw
dXNoX2JhY2soc3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+IGluaXQpCi0gICAgewot
ICAgICAgICBpZiAoaXNfb2JqZWN0KCkgYW5kIGluaXQuc2l6ZSgpID09IDIgYW5kIGluaXQuYmVn
aW4oKS0+aXNfc3RyaW5nKCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IHN0cmluZ190
IGtleSA9ICppbml0LmJlZ2luKCk7Ci0gICAgICAgICAgICBwdXNoX2JhY2sodHlwZW5hbWUgb2Jq
ZWN0X3Q6OnZhbHVlX3R5cGUoa2V5LCAqKGluaXQuYmVnaW4oKSArIDEpKSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBwdXNoX2JhY2soYmFzaWNfanNv
bihpbml0KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgYWRkIGFu
IG9iamVjdCB0byBhbiBvYmplY3QKLSAgICBAY29weWRvYyBwdXNoX2JhY2soc3RkOjppbml0aWFs
aXplcl9saXN0PGJhc2ljX2pzb24+KQotICAgICovCi0gICAgcmVmZXJlbmNlIG9wZXJhdG9yKz0o
c3RkOjppbml0aWFsaXplcl9saXN0PGJhc2ljX2pzb24+IGluaXQpCi0gICAgewotICAgICAgICBw
dXNoX2JhY2soaW5pdCk7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICAvKiEK
LSAgICBAYnJpZWYgYWRkIGFuIG9iamVjdCB0byBhbiBhcnJheQotCi0gICAgQ3JlYXRlcyBhIEpT
T04gdmFsdWUgZnJvbSB0aGUgcGFzc2VkIHBhcmFtZXRlcnMgQGEgYXJncyB0byB0aGUgZW5kIG9m
IHRoZQotICAgIEpTT04gdmFsdWUuIElmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgb24gYSBKU09O
IG51bGwgdmFsdWUsIGFuIGVtcHR5IGFycmF5Ci0gICAgaXMgY3JlYXRlZCBiZWZvcmUgYXBwZW5k
aW5nIHRoZSB2YWx1ZSBjcmVhdGVkIGZyb20gQGEgYXJncy4KLQotICAgIEBwYXJhbVtpbl0gYXJn
cyBhcmd1bWVudHMgdG8gZm9yd2FyZCB0byBhIGNvbnN0cnVjdG9yIG9mIEByZWYgYmFzaWNfanNv
bgotICAgIEB0cGFyYW0gQXJncyBjb21wYXRpYmxlIHR5cGVzIHRvIGNyZWF0ZSBhIEByZWYgYmFz
aWNfanNvbiBvYmplY3QKLQotICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciB3aGVuIGNhbGxl
ZCBvbiBhIHR5cGUgb3RoZXIgdGhhbiBKU09OIGFycmF5IG9yCi0gICAgbnVsbDsgZXhhbXBsZTog
YCJjYW5ub3QgdXNlIGVtcGxhY2VfYmFjaygpIHdpdGggbnVtYmVyImAKLQotICAgIEBjb21wbGV4
aXR5IEFtb3J0aXplZCBjb25zdGFudC4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBz
aG93cyBob3cgYHB1c2hfYmFjaygpYCBjYW4gYmUgdXNlZCB0byBhZGQKLSAgICBlbGVtZW50cyB0
byBhIEpTT04gYXJyYXkuIE5vdGUgaG93IHRoZSBgbnVsbGAgdmFsdWUgd2FzIHNpbGVudGx5IGNv
bnZlcnRlZAotICAgIHRvIGEgSlNPTiBhcnJheS4sZW1wbGFjZV9iYWNrfQotCi0gICAgQHNpbmNl
IHZlcnNpb24gMi4wLjgKLSAgICAqLwotICAgIHRlbXBsYXRlPGNsYXNzLi4uIEFyZ3M+Ci0gICAg
dm9pZCBlbXBsYWNlX2JhY2soQXJncyYmIC4uLiBhcmdzKQotICAgIHsKLSAgICAgICAgLy8gZW1w
bGFjZV9iYWNrIG9ubHkgd29ya3MgZm9yIG51bGwgb2JqZWN0cyBvciBhcnJheXMKLSAgICAgICAg
aWYgKG5vdChpc19udWxsKCkgb3IgaXNfYXJyYXkoKSkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEpTT05fVEhST1coc3RkOjpkb21haW5fZXJyb3IoImNhbm5vdCB1c2UgZW1wbGFjZV9iYWNrKCkg
d2l0aCAiICsgdHlwZV9uYW1lKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIHRyYW5zZm9y
bSBudWxsIG9iamVjdCBpbnRvIGFuIGFycmF5Ci0gICAgICAgIGlmIChpc19udWxsKCkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1fdHlwZSA9IHZhbHVlX3Q6OmFycmF5OwotICAgICAgICAgICAg
bV92YWx1ZSA9IHZhbHVlX3Q6OmFycmF5OwotICAgICAgICAgICAgYXNzZXJ0X2ludmFyaWFudCgp
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYWRkIGVsZW1lbnQgdG8gYXJyYXkgKHBlcmZlY3Qg
Zm9yd2FyZGluZykKLSAgICAgICAgbV92YWx1ZS5hcnJheS0+ZW1wbGFjZV9iYWNrKHN0ZDo6Zm9y
d2FyZDxBcmdzPihhcmdzKS4uLik7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIGFkZCBh
biBvYmplY3QgdG8gYW4gb2JqZWN0IGlmIGtleSBkb2VzIG5vdCBleGlzdAotCi0gICAgSW5zZXJ0
cyBhIG5ldyBlbGVtZW50IGludG8gYSBKU09OIG9iamVjdCBjb25zdHJ1Y3RlZCBpbi1wbGFjZSB3
aXRoIHRoZQotICAgIGdpdmVuIEBhIGFyZ3MgaWYgdGhlcmUgaXMgbm8gZWxlbWVudCB3aXRoIHRo
ZSBrZXkgaW4gdGhlIGNvbnRhaW5lci4gSWYgdGhlCi0gICAgZnVuY3Rpb24gaXMgY2FsbGVkIG9u
IGEgSlNPTiBudWxsIHZhbHVlLCBhbiBlbXB0eSBvYmplY3QgaXMgY3JlYXRlZCBiZWZvcmUKLSAg
ICBhcHBlbmRpbmcgdGhlIHZhbHVlIGNyZWF0ZWQgZnJvbSBAYSBhcmdzLgotCi0gICAgQHBhcmFt
W2luXSBhcmdzIGFyZ3VtZW50cyB0byBmb3J3YXJkIHRvIGEgY29uc3RydWN0b3Igb2YgQHJlZiBi
YXNpY19qc29uCi0gICAgQHRwYXJhbSBBcmdzIGNvbXBhdGlibGUgdHlwZXMgdG8gY3JlYXRlIGEg
QHJlZiBiYXNpY19qc29uIG9iamVjdAotCi0gICAgQHJldHVybiBhIHBhaXIgY29uc2lzdGluZyBv
ZiBhbiBpdGVyYXRvciB0byB0aGUgaW5zZXJ0ZWQgZWxlbWVudCwgb3IgdGhlCi0gICAgICAgICAg
ICBhbHJlYWR5LWV4aXN0aW5nIGVsZW1lbnQgaWYgbm8gaW5zZXJ0aW9uIGhhcHBlbmVkLCBhbmQg
YSBib29sCi0gICAgICAgICAgICBkZW5vdGluZyB3aGV0aGVyIHRoZSBpbnNlcnRpb24gdG9vayBw
bGFjZS4KLQotICAgIEB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciB3aGVuIGNhbGxlZCBvbiBhIHR5
cGUgb3RoZXIgdGhhbiBKU09OIG9iamVjdCBvcgotICAgIG51bGw7IGV4YW1wbGU6IGAiY2Fubm90
IHVzZSBlbXBsYWNlKCkgd2l0aCBudW1iZXIiYAotCi0gICAgQGNvbXBsZXhpdHkgTG9nYXJpdGht
aWMgaW4gdGhlIHNpemUgb2YgdGhlIGNvbnRhaW5lciwgTyhsb2coYHNpemUoKWApKS4KLQotICAg
IEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBzaG93cyBob3cgYGVtcGxhY2UoKWAgY2FuIGJlIHVz
ZWQgdG8gYWRkIGVsZW1lbnRzCi0gICAgdG8gYSBKU09OIG9iamVjdC4gTm90ZSBob3cgdGhlIGBu
dWxsYCB2YWx1ZSB3YXMgc2lsZW50bHkgY29udmVydGVkIHRvIGEKLSAgICBKU09OIG9iamVjdC4g
RnVydGhlciBub3RlIGhvdyBubyB2YWx1ZSBpcyBhZGRlZCBpZiB0aGVyZSB3YXMgYWxyZWFkeSBv
bmUKLSAgICB2YWx1ZSBzdG9yZWQgd2l0aCB0aGUgc2FtZSBrZXkuLGVtcGxhY2V9Ci0KLSAgICBA
c2luY2UgdmVyc2lvbiAyLjAuOAotICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MuLi4gQXJncz4K
LSAgICBzdGQ6OnBhaXI8aXRlcmF0b3IsIGJvb2w+IGVtcGxhY2UoQXJncyYmIC4uLiBhcmdzKQot
ICAgIHsKLSAgICAgICAgLy8gZW1wbGFjZSBvbmx5IHdvcmtzIGZvciBudWxsIG9iamVjdHMgb3Ig
YXJyYXlzCi0gICAgICAgIGlmIChub3QoaXNfbnVsbCgpIG9yIGlzX29iamVjdCgpKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigiY2Fubm90IHVz
ZSBlbXBsYWNlKCkgd2l0aCAiICsgdHlwZV9uYW1lKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIHRyYW5zZm9ybSBudWxsIG9iamVjdCBpbnRvIGFuIG9iamVjdAotICAgICAgICBpZiAoaXNf
bnVsbCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3R5cGUgPSB2YWx1ZV90OjpvYmplY3Q7
Ci0gICAgICAgICAgICBtX3ZhbHVlID0gdmFsdWVfdDo6b2JqZWN0OwotICAgICAgICAgICAgYXNz
ZXJ0X2ludmFyaWFudCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gYWRkIGVsZW1lbnQgdG8g
YXJyYXkgKHBlcmZlY3QgZm9yd2FyZGluZykKLSAgICAgICAgYXV0byByZXMgPSBtX3ZhbHVlLm9i
amVjdC0+ZW1wbGFjZShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwotICAgICAgICAvLyBj
cmVhdGUgcmVzdWx0IGl0ZXJhdG9yIGFuZCBzZXQgaXRlcmF0b3IgdG8gdGhlIHJlc3VsdCBvZiBl
bXBsYWNlCi0gICAgICAgIGF1dG8gaXQgPSBiZWdpbigpOwotICAgICAgICBpdC5tX2l0Lm9iamVj
dF9pdGVyYXRvciA9IHJlcy5maXJzdDsKLQotICAgICAgICAvLyByZXR1cm4gcGFpciBvZiBpdGVy
YXRvciBhbmQgYm9vbGVhbgotICAgICAgICByZXR1cm4ge2l0LCByZXMuc2Vjb25kfTsKLSAgICB9
Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgaW5zZXJ0cyBlbGVtZW50Ci0KLSAgICBJbnNlcnRzIGVs
ZW1lbnQgQGEgdmFsIGJlZm9yZSBpdGVyYXRvciBAYSBwb3MuCi0KLSAgICBAcGFyYW1baW5dIHBv
cyBpdGVyYXRvciBiZWZvcmUgd2hpY2ggdGhlIGNvbnRlbnQgd2lsbCBiZSBpbnNlcnRlZDsgbWF5
IGJlCi0gICAgdGhlIGVuZCgpIGl0ZXJhdG9yCi0gICAgQHBhcmFtW2luXSB2YWwgZWxlbWVudCB0
byBpbnNlcnQKLSAgICBAcmV0dXJuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBpbnNlcnRlZCBA
YSB2YWwuCi0KLSAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgY2FsbGVkIG9uIEpTT04g
dmFsdWVzIG90aGVyIHRoYW4gYXJyYXlzOwotICAgIGV4YW1wbGU6IGAiY2Fubm90IHVzZSBpbnNl
cnQoKSB3aXRoIHN0cmluZyJgCi0gICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEBhIHBv
cyBpcyBub3QgYW4gaXRlcmF0b3Igb2YgKnRoaXM7IGV4YW1wbGU6Ci0gICAgYCJpdGVyYXRvciBk
b2VzIG5vdCBmaXQgY3VycmVudCB2YWx1ZSJgCi0KLSAgICBAY29tcGxleGl0eSBDb25zdGFudCBw
bHVzIGxpbmVhciBpbiB0aGUgZGlzdGFuY2UgYmV0d2VlbiBAYSBwb3MgYW5kIGVuZCBvZgotICAg
IHRoZSBjb250YWluZXIuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgaG93
IGBpbnNlcnQoKWAgaXMgdXNlZC4saW5zZXJ0fQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAK
LSAgICAqLwotICAgIGl0ZXJhdG9yIGluc2VydChjb25zdF9pdGVyYXRvciBwb3MsIGNvbnN0IGJh
c2ljX2pzb24mIHZhbCkKLSAgICB7Ci0gICAgICAgIC8vIGluc2VydCBvbmx5IHdvcmtzIGZvciBh
cnJheXMKLSAgICAgICAgaWYgKGlzX2FycmF5KCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8v
IGNoZWNrIGlmIGl0ZXJhdG9yIHBvcyBmaXRzIHRvIHRoaXMgSlNPTiB2YWx1ZQotICAgICAgICAg
ICAgaWYgKHBvcy5tX29iamVjdCAhPSB0aGlzKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIEpTT05fVEhST1coc3RkOjpkb21haW5fZXJyb3IoIml0ZXJhdG9yIGRvZXMgbm90IGZpdCBj
dXJyZW50IHZhbHVlIikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBpbnNlcnQg
dG8gYXJyYXkgYW5kIHJldHVybiBpdGVyYXRvcgotICAgICAgICAgICAgaXRlcmF0b3IgcmVzdWx0
KHRoaXMpOwotICAgICAgICAgICAgcmVzdWx0Lm1faXQuYXJyYXlfaXRlcmF0b3IgPSBtX3ZhbHVl
LmFycmF5LT5pbnNlcnQocG9zLm1faXQuYXJyYXlfaXRlcmF0b3IsIHZhbCk7Ci0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRv
bWFpbl9lcnJvcigiY2Fubm90IHVzZSBpbnNlcnQoKSB3aXRoICIgKyB0eXBlX25hbWUoKSkpOwot
ICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBpbnNlcnRzIGVsZW1lbnQKLSAgICBAY29weWRv
YyBpbnNlcnQoY29uc3RfaXRlcmF0b3IsIGNvbnN0IGJhc2ljX2pzb24mKQotICAgICovCi0gICAg
aXRlcmF0b3IgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIHBvcywgYmFzaWNfanNvbiYmIHZhbCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBpbnNlcnQocG9zLCB2YWwpOwotICAgIH0KLQotICAgIC8qIQot
ICAgIEBicmllZiBpbnNlcnRzIGVsZW1lbnRzCi0KLSAgICBJbnNlcnRzIEBhIGNudCBjb3BpZXMg
b2YgQGEgdmFsIGJlZm9yZSBpdGVyYXRvciBAYSBwb3MuCi0KLSAgICBAcGFyYW1baW5dIHBvcyBp
dGVyYXRvciBiZWZvcmUgd2hpY2ggdGhlIGNvbnRlbnQgd2lsbCBiZSBpbnNlcnRlZDsgbWF5IGJl
Ci0gICAgdGhlIGVuZCgpIGl0ZXJhdG9yCi0gICAgQHBhcmFtW2luXSBjbnQgbnVtYmVyIG9mIGNv
cGllcyBvZiBAYSB2YWwgdG8gaW5zZXJ0Ci0gICAgQHBhcmFtW2luXSB2YWwgZWxlbWVudCB0byBp
bnNlcnQKLSAgICBAcmV0dXJuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50
IGluc2VydGVkLCBvciBAYSBwb3MgaWYKLSAgICBgY250PT0wYAotCi0gICAgQHRocm93IHN0ZDo6
ZG9tYWluX2Vycm9yIGlmIGNhbGxlZCBvbiBKU09OIHZhbHVlcyBvdGhlciB0aGFuIGFycmF5czsK
LSAgICBleGFtcGxlOiBgImNhbm5vdCB1c2UgaW5zZXJ0KCkgd2l0aCBzdHJpbmciYAotICAgIEB0
aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciBpZiBAYSBwb3MgaXMgbm90IGFuIGl0ZXJhdG9yIG9mICp0
aGlzOyBleGFtcGxlOgotICAgIGAiaXRlcmF0b3IgZG9lcyBub3QgZml0IGN1cnJlbnQgdmFsdWUi
YAotCi0gICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIEBhIGNudCBwbHVzIGxpbmVhciBpbiB0aGUg
ZGlzdGFuY2UgYmV0d2VlbiBAYSBwb3MKLSAgICBhbmQgZW5kIG9mIHRoZSBjb250YWluZXIuCi0K
LSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgaG93IGBpbnNlcnQoKWAgaXMgdXNl
ZC4saW5zZXJ0X19jb3VudH0KLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAg
ICBpdGVyYXRvciBpbnNlcnQoY29uc3RfaXRlcmF0b3IgcG9zLCBzaXplX3R5cGUgY250LCBjb25z
dCBiYXNpY19qc29uJiB2YWwpCi0gICAgewotICAgICAgICAvLyBpbnNlcnQgb25seSB3b3JrcyBm
b3IgYXJyYXlzCi0gICAgICAgIGlmIChpc19hcnJheSgpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBjaGVjayBpZiBpdGVyYXRvciBwb3MgZml0cyB0byB0aGlzIEpTT04gdmFsdWUKLSAgICAg
ICAgICAgIGlmIChwb3MubV9vYmplY3QgIT0gdGhpcykKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9tYWluX2Vycm9yKCJpdGVyYXRvciBkb2VzIG5vdCBm
aXQgY3VycmVudCB2YWx1ZSIpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gaW5z
ZXJ0IHRvIGFycmF5IGFuZCByZXR1cm4gaXRlcmF0b3IKLSAgICAgICAgICAgIGl0ZXJhdG9yIHJl
c3VsdCh0aGlzKTsKLSAgICAgICAgICAgIHJlc3VsdC5tX2l0LmFycmF5X2l0ZXJhdG9yID0gbV92
YWx1ZS5hcnJheS0+aW5zZXJ0KHBvcy5tX2l0LmFycmF5X2l0ZXJhdG9yLCBjbnQsIHZhbCk7Ci0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgSlNPTl9USFJP
VyhzdGQ6OmRvbWFpbl9lcnJvcigiY2Fubm90IHVzZSBpbnNlcnQoKSB3aXRoICIgKyB0eXBlX25h
bWUoKSkpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBpbnNlcnRzIGVsZW1lbnRzCi0K
LSAgICBJbnNlcnRzIGVsZW1lbnRzIGZyb20gcmFuZ2UgYFtmaXJzdCwgbGFzdClgIGJlZm9yZSBp
dGVyYXRvciBAYSBwb3MuCi0KLSAgICBAcGFyYW1baW5dIHBvcyBpdGVyYXRvciBiZWZvcmUgd2hp
Y2ggdGhlIGNvbnRlbnQgd2lsbCBiZSBpbnNlcnRlZDsgbWF5IGJlCi0gICAgdGhlIGVuZCgpIGl0
ZXJhdG9yCi0gICAgQHBhcmFtW2luXSBmaXJzdCBiZWdpbiBvZiB0aGUgcmFuZ2Ugb2YgZWxlbWVu
dHMgdG8gaW5zZXJ0Ci0gICAgQHBhcmFtW2luXSBsYXN0IGVuZCBvZiB0aGUgcmFuZ2Ugb2YgZWxl
bWVudHMgdG8gaW5zZXJ0Ci0KLSAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgY2FsbGVk
IG9uIEpTT04gdmFsdWVzIG90aGVyIHRoYW4gYXJyYXlzOwotICAgIGV4YW1wbGU6IGAiY2Fubm90
IHVzZSBpbnNlcnQoKSB3aXRoIHN0cmluZyJgCi0gICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9y
IGlmIEBhIHBvcyBpcyBub3QgYW4gaXRlcmF0b3Igb2YgKnRoaXM7IGV4YW1wbGU6Ci0gICAgYCJp
dGVyYXRvciBkb2VzIG5vdCBmaXQgY3VycmVudCB2YWx1ZSJgCi0gICAgQHRocm93IHN0ZDo6ZG9t
YWluX2Vycm9yIGlmIEBhIGZpcnN0IGFuZCBAYSBsYXN0IGRvIG5vdCBiZWxvbmcgdG8gdGhlIHNh
bWUKLSAgICBKU09OIHZhbHVlOyBleGFtcGxlOiBgIml0ZXJhdG9ycyBkbyBub3QgZml0ImAKLSAg
ICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgaWYgQGEgZmlyc3Qgb3IgQGEgbGFzdCBhcmUgaXRl
cmF0b3JzIGludG8KLSAgICBjb250YWluZXIgZm9yIHdoaWNoIGluc2VydCBpcyBjYWxsZWQ7IGV4
YW1wbGU6IGAicGFzc2VkIGl0ZXJhdG9ycyBtYXkgbm90Ci0gICAgYmVsb25nIHRvIGNvbnRhaW5l
ciJgCi0KLSAgICBAcmV0dXJuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50
IGluc2VydGVkLCBvciBAYSBwb3MgaWYKLSAgICBgZmlyc3Q9PWxhc3RgCi0KLSAgICBAY29tcGxl
eGl0eSBMaW5lYXIgaW4gYHN0ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpYCBwbHVzIGxpbmVhciBp
biB0aGUKLSAgICBkaXN0YW5jZSBiZXR3ZWVuIEBhIHBvcyBhbmQgZW5kIG9mIHRoZSBjb250YWlu
ZXIuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgaG93IGBpbnNlcnQoKWAg
aXMgdXNlZC4saW5zZXJ0X19yYW5nZX0KLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAg
Ki8KLSAgICBpdGVyYXRvciBpbnNlcnQoY29uc3RfaXRlcmF0b3IgcG9zLCBjb25zdF9pdGVyYXRv
ciBmaXJzdCwgY29uc3RfaXRlcmF0b3IgbGFzdCkKLSAgICB7Ci0gICAgICAgIC8vIGluc2VydCBv
bmx5IHdvcmtzIGZvciBhcnJheXMKLSAgICAgICAgaWYgKG5vdCBpc19hcnJheSgpKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9tYWluX2Vycm9yKCJjYW5ub3QgdXNl
IGluc2VydCgpIHdpdGggIiArIHR5cGVfbmFtZSgpKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAv
LyBjaGVjayBpZiBpdGVyYXRvciBwb3MgZml0cyB0byB0aGlzIEpTT04gdmFsdWUKLSAgICAgICAg
aWYgKHBvcy5tX29iamVjdCAhPSB0aGlzKQotICAgICAgICB7Ci0gICAgICAgICAgICBKU09OX1RI
Uk9XKHN0ZDo6ZG9tYWluX2Vycm9yKCJpdGVyYXRvciBkb2VzIG5vdCBmaXQgY3VycmVudCB2YWx1
ZSIpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNoZWNrIGlmIHJhbmdlIGl0ZXJhdG9ycyBi
ZWxvbmcgdG8gdGhlIHNhbWUgSlNPTiBvYmplY3QKLSAgICAgICAgaWYgKGZpcnN0Lm1fb2JqZWN0
ICE9IGxhc3QubV9vYmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTT05fVEhST1coc3Rk
Ojpkb21haW5fZXJyb3IoIml0ZXJhdG9ycyBkbyBub3QgZml0IikpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGZpcnN0Lm1fb2JqZWN0ID09IHRoaXMgb3IgbGFzdC5tX29iamVjdCA9PSB0aGlz
KQotICAgICAgICB7Ci0gICAgICAgICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9tYWluX2Vycm9yKCJw
YXNzZWQgaXRlcmF0b3JzIG1heSBub3QgYmVsb25nIHRvIGNvbnRhaW5lciIpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIGluc2VydCB0byBhcnJheSBhbmQgcmV0dXJuIGl0ZXJhdG9yCi0gICAg
ICAgIGl0ZXJhdG9yIHJlc3VsdCh0aGlzKTsKLSAgICAgICAgcmVzdWx0Lm1faXQuYXJyYXlfaXRl
cmF0b3IgPSBtX3ZhbHVlLmFycmF5LT5pbnNlcnQoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBvcy5tX2l0LmFycmF5X2l0ZXJhdG9yLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdC5tX2l0LmFycmF5X2l0ZXJhdG9yLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Lm1faXQuYXJyYXlfaXRl
cmF0b3IpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qIQotICAgIEBi
cmllZiBpbnNlcnRzIGVsZW1lbnRzCi0KLSAgICBJbnNlcnRzIGVsZW1lbnRzIGZyb20gaW5pdGlh
bGl6ZXIgbGlzdCBAYSBpbGlzdCBiZWZvcmUgaXRlcmF0b3IgQGEgcG9zLgotCi0gICAgQHBhcmFt
W2luXSBwb3MgaXRlcmF0b3IgYmVmb3JlIHdoaWNoIHRoZSBjb250ZW50IHdpbGwgYmUgaW5zZXJ0
ZWQ7IG1heSBiZQotICAgIHRoZSBlbmQoKSBpdGVyYXRvcgotICAgIEBwYXJhbVtpbl0gaWxpc3Qg
aW5pdGlhbGl6ZXIgbGlzdCB0byBpbnNlcnQgdGhlIHZhbHVlcyBmcm9tCi0KLSAgICBAdGhyb3cg
c3RkOjpkb21haW5fZXJyb3IgaWYgY2FsbGVkIG9uIEpTT04gdmFsdWVzIG90aGVyIHRoYW4gYXJy
YXlzOwotICAgIGV4YW1wbGU6IGAiY2Fubm90IHVzZSBpbnNlcnQoKSB3aXRoIHN0cmluZyJgCi0g
ICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIGlmIEBhIHBvcyBpcyBub3QgYW4gaXRlcmF0b3Ig
b2YgKnRoaXM7IGV4YW1wbGU6Ci0gICAgYCJpdGVyYXRvciBkb2VzIG5vdCBmaXQgY3VycmVudCB2
YWx1ZSJgCi0KLSAgICBAcmV0dXJuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVt
ZW50IGluc2VydGVkLCBvciBAYSBwb3MgaWYKLSAgICBgaWxpc3RgIGlzIGVtcHR5Ci0KLSAgICBA
Y29tcGxleGl0eSBMaW5lYXIgaW4gYGlsaXN0LnNpemUoKWAgcGx1cyBsaW5lYXIgaW4gdGhlIGRp
c3RhbmNlIGJldHdlZW4KLSAgICBAYSBwb3MgYW5kIGVuZCBvZiB0aGUgY29udGFpbmVyLgotCi0g
ICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIGhvdyBgaW5zZXJ0KClgIGlzIHVzZWQu
LGluc2VydF9faWxpc3R9Ci0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAg
aXRlcmF0b3IgaW5zZXJ0KGNvbnN0X2l0ZXJhdG9yIHBvcywgc3RkOjppbml0aWFsaXplcl9saXN0
PGJhc2ljX2pzb24+IGlsaXN0KQotICAgIHsKLSAgICAgICAgLy8gaW5zZXJ0IG9ubHkgd29ya3Mg
Zm9yIGFycmF5cwotICAgICAgICBpZiAobm90IGlzX2FycmF5KCkpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIEpTT05fVEhST1coc3RkOjpkb21haW5fZXJyb3IoImNhbm5vdCB1c2UgaW5zZXJ0KCkg
d2l0aCAiICsgdHlwZV9uYW1lKCkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNoZWNrIGlm
IGl0ZXJhdG9yIHBvcyBmaXRzIHRvIHRoaXMgSlNPTiB2YWx1ZQotICAgICAgICBpZiAocG9zLm1f
b2JqZWN0ICE9IHRoaXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjpk
b21haW5fZXJyb3IoIml0ZXJhdG9yIGRvZXMgbm90IGZpdCBjdXJyZW50IHZhbHVlIikpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gaW5zZXJ0IHRvIGFycmF5IGFuZCByZXR1cm4gaXRlcmF0b3IK
LSAgICAgICAgaXRlcmF0b3IgcmVzdWx0KHRoaXMpOwotICAgICAgICByZXN1bHQubV9pdC5hcnJh
eV9pdGVyYXRvciA9IG1fdmFsdWUuYXJyYXktPmluc2VydChwb3MubV9pdC5hcnJheV9pdGVyYXRv
ciwgaWxpc3QpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qIQotICAg
IEBicmllZiBleGNoYW5nZXMgdGhlIHZhbHVlcwotCi0gICAgRXhjaGFuZ2VzIHRoZSBjb250ZW50
cyBvZiB0aGUgSlNPTiB2YWx1ZSB3aXRoIHRob3NlIG9mIEBhIG90aGVyLiBEb2VzIG5vdAotICAg
IGludm9rZSBhbnkgbW92ZSwgY29weSwgb3Igc3dhcCBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwg
ZWxlbWVudHMuIEFsbAotICAgIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyByZW1haW4gdmFsaWQu
IFRoZSBwYXN0LXRoZS1lbmQgaXRlcmF0b3IgaXMKLSAgICBpbnZhbGlkYXRlZC4KLQotICAgIEBw
YXJhbVtpbixvdXRdIG90aGVyIEpTT04gdmFsdWUgdG8gZXhjaGFuZ2UgdGhlIGNvbnRlbnRzIHdp
dGgKLQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBl
eGFtcGxlIGJlbG93IHNob3dzIGhvdyBKU09OIHZhbHVlcyBjYW4gYmUgc3dhcHBlZCB3aXRoCi0g
ICAgYHN3YXAoKWAuLHN3YXBfX3JlZmVyZW5jZX0KLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4w
Ci0gICAgKi8KLSAgICB2b2lkIHN3YXAocmVmZXJlbmNlIG90aGVyKSBub2V4Y2VwdCAoCi0gICAg
ICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8dmFsdWVfdD46OnZhbHVlIGFu
ZAotICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPHZhbHVlX3Q+Ojp2YWx1
ZSBhbmQKLSAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJsZTxqc29uX3Zh
bHVlPjo6dmFsdWUgYW5kCi0gICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2Fzc2lnbmFibGU8
anNvbl92YWx1ZT46OnZhbHVlCi0gICAgKQotICAgIHsKLSAgICAgICAgc3RkOjpzd2FwKG1fdHlw
ZSwgb3RoZXIubV90eXBlKTsKLSAgICAgICAgc3RkOjpzd2FwKG1fdmFsdWUsIG90aGVyLm1fdmFs
dWUpOwotICAgICAgICBhc3NlcnRfaW52YXJpYW50KCk7Ci0gICAgfQotCi0gICAgLyohCi0gICAg
QGJyaWVmIGV4Y2hhbmdlcyB0aGUgdmFsdWVzCi0KLSAgICBFeGNoYW5nZXMgdGhlIGNvbnRlbnRz
IG9mIGEgSlNPTiBhcnJheSB3aXRoIHRob3NlIG9mIEBhIG90aGVyLiBEb2VzIG5vdAotICAgIGlu
dm9rZSBhbnkgbW92ZSwgY29weSwgb3Igc3dhcCBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwgZWxl
bWVudHMuIEFsbAotICAgIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyByZW1haW4gdmFsaWQuIFRo
ZSBwYXN0LXRoZS1lbmQgaXRlcmF0b3IgaXMKLSAgICBpbnZhbGlkYXRlZC4KLQotICAgIEBwYXJh
bVtpbixvdXRdIG90aGVyIGFycmF5IHRvIGV4Y2hhbmdlIHRoZSBjb250ZW50cyB3aXRoCi0KLSAg
ICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3Igd2hlbiBKU09OIHZhbHVlIGlzIG5vdCBhbiBhcnJh
eTsgZXhhbXBsZToKLSAgICBgImNhbm5vdCB1c2Ugc3dhcCgpIHdpdGggc3RyaW5nImAKLQotICAg
IEBjb21wbGV4aXR5IENvbnN0YW50LgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJl
bG93IHNob3dzIGhvdyBhcnJheXMgY2FuIGJlIHN3YXBwZWQgd2l0aAotICAgIGBzd2FwKClgLixz
d2FwX19hcnJheV90fQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIHZv
aWQgc3dhcChhcnJheV90JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIC8vIHN3YXAgb25seSB3b3Jr
cyBmb3IgYXJyYXlzCi0gICAgICAgIGlmIChpc19hcnJheSgpKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBzdGQ6OnN3YXAoKihtX3ZhbHVlLmFycmF5KSwgb3RoZXIpOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9l
cnJvcigiY2Fubm90IHVzZSBzd2FwKCkgd2l0aCAiICsgdHlwZV9uYW1lKCkpKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBleGNoYW5nZXMgdGhlIHZhbHVlcwotCi0g
ICAgRXhjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBhIEpTT04gb2JqZWN0IHdpdGggdGhvc2Ugb2Yg
QGEgb3RoZXIuIERvZXMgbm90Ci0gICAgaW52b2tlIGFueSBtb3ZlLCBjb3B5LCBvciBzd2FwIG9w
ZXJhdGlvbnMgb24gaW5kaXZpZHVhbCBlbGVtZW50cy4gQWxsCi0gICAgaXRlcmF0b3JzIGFuZCBy
ZWZlcmVuY2VzIHJlbWFpbiB2YWxpZC4gVGhlIHBhc3QtdGhlLWVuZCBpdGVyYXRvciBpcwotICAg
IGludmFsaWRhdGVkLgotCi0gICAgQHBhcmFtW2luLG91dF0gb3RoZXIgb2JqZWN0IHRvIGV4Y2hh
bmdlIHRoZSBjb250ZW50cyB3aXRoCi0KLSAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3Igd2hl
biBKU09OIHZhbHVlIGlzIG5vdCBhbiBvYmplY3Q7IGV4YW1wbGU6Ci0gICAgYCJjYW5ub3QgdXNl
IHN3YXAoKSB3aXRoIHN0cmluZyJgCi0KLSAgICBAY29tcGxleGl0eSBDb25zdGFudC4KLQotICAg
IEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBob3cgb2JqZWN0cyBjYW4gYmUg
c3dhcHBlZCB3aXRoCi0gICAgYHN3YXAoKWAuLHN3YXBfX29iamVjdF90fQotCi0gICAgQHNpbmNl
IHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIHZvaWQgc3dhcChvYmplY3RfdCYgb3RoZXIpCi0g
ICAgewotICAgICAgICAvLyBzd2FwIG9ubHkgd29ya3MgZm9yIG9iamVjdHMKLSAgICAgICAgaWYg
KGlzX29iamVjdCgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGQ6OnN3YXAoKihtX3ZhbHVl
Lm9iamVjdCksIG90aGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEpTT05fVEhST1coc3RkOjpkb21haW5fZXJyb3IoImNhbm5vdCB1c2Ugc3dhcCgp
IHdpdGggIiArIHR5cGVfbmFtZSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiEKLSAg
ICBAYnJpZWYgZXhjaGFuZ2VzIHRoZSB2YWx1ZXMKLQotICAgIEV4Y2hhbmdlcyB0aGUgY29udGVu
dHMgb2YgYSBKU09OIHN0cmluZyB3aXRoIHRob3NlIG9mIEBhIG90aGVyLiBEb2VzIG5vdAotICAg
IGludm9rZSBhbnkgbW92ZSwgY29weSwgb3Igc3dhcCBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwg
ZWxlbWVudHMuIEFsbAotICAgIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyByZW1haW4gdmFsaWQu
IFRoZSBwYXN0LXRoZS1lbmQgaXRlcmF0b3IgaXMKLSAgICBpbnZhbGlkYXRlZC4KLQotICAgIEBw
YXJhbVtpbixvdXRdIG90aGVyIHN0cmluZyB0byBleGNoYW5nZSB0aGUgY29udGVudHMgd2l0aAot
Ci0gICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yIHdoZW4gSlNPTiB2YWx1ZSBpcyBub3QgYSBz
dHJpbmc7IGV4YW1wbGU6IGAiY2Fubm90Ci0gICAgdXNlIHN3YXAoKSB3aXRoIGJvb2xlYW4iYAot
Ci0gICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1w
bGUgYmVsb3cgc2hvd3MgaG93IHN0cmluZ3MgY2FuIGJlIHN3YXBwZWQgd2l0aAotICAgIGBzd2Fw
KClgLixzd2FwX19zdHJpbmdfdH0KLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8K
LSAgICB2b2lkIHN3YXAoc3RyaW5nX3QmIG90aGVyKQotICAgIHsKLSAgICAgICAgLy8gc3dhcCBv
bmx5IHdvcmtzIGZvciBzdHJpbmdzCi0gICAgICAgIGlmIChpc19zdHJpbmcoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgc3RkOjpzd2FwKCoobV92YWx1ZS5zdHJpbmcpLCBvdGhlcik7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBKU09OX1RIUk9XKHN0
ZDo6ZG9tYWluX2Vycm9yKCJjYW5ub3QgdXNlIHN3YXAoKSB3aXRoICIgKyB0eXBlX25hbWUoKSkp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8vIEB9Ci0KLSAgcHVibGljOgotICAgIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIGxleGljb2dyYXBo
aWNhbCBjb21wYXJpc29uIG9wZXJhdG9ycyAvLwotICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLwotCi0gICAgLy8vIEBuYW1lIGxleGljb2dyYXBoaWNhbCBjb21w
YXJpc29uIG9wZXJhdG9ycwotICAgIC8vLyBAewotCi0gICAgLyohCi0gICAgQGJyaWVmIGNvbXBh
cmlzb246IGVxdWFsCi0KLSAgICBDb21wYXJlcyB0d28gSlNPTiB2YWx1ZXMgZm9yIGVxdWFsaXR5
IGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJ1bGVzOgotICAgIC0gVHdvIEpTT04gdmFsdWVz
IGFyZSBlcXVhbCBpZiAoMSkgdGhleSBhcmUgZnJvbSB0aGUgc2FtZSB0eXBlIGFuZCAoMikKLSAg
ICAgIHRoZWlyIHN0b3JlZCB2YWx1ZXMgYXJlIHRoZSBzYW1lLgotICAgIC0gSW50ZWdlciBhbmQg
ZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgYmVmb3Jl
Ci0gICAgICBjb21wYXJpc29uLiBGbG9hdGluZy1wb2ludCBudW1iZXJzIGFyZSBjb21wYXJlZCBp
bmRpcmVjdGx5OiB0d28KLSAgICAgIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYGYxYCBhbmQgYGYy
YCBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZiBuZWl0aGVyCi0gICAgICBgZjEgPiBmMmAgbm9yIGBm
MiA+IGYxYCBob2xkcy4KLSAgICAtIFR3byBKU09OIG51bGwgdmFsdWVzIGFyZSBlcXVhbC4KLQot
ICAgIEBwYXJhbVtpbl0gbGhzICBmaXJzdCBKU09OIHZhbHVlIHRvIGNvbnNpZGVyCi0gICAgQHBh
cmFtW2luXSByaHMgIHNlY29uZCBKU09OIHZhbHVlIHRvIGNvbnNpZGVyCi0gICAgQHJldHVybiB3
aGV0aGVyIHRoZSB2YWx1ZXMgQGEgbGhzIGFuZCBAYSByaHMgYXJlIGVxdWFsCi0KLSAgICBAY29t
cGxleGl0eSBMaW5lYXIuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgZGVtb25zdHJh
dGVzIGNvbXBhcmluZyBzZXZlcmFsIEpTT04KLSAgICB0eXBlcy4sb3BlcmF0b3JfX2VxdWFsfQot
Ci0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAgIGZyaWVuZCBib29sIG9wZXJh
dG9yPT0oY29uc3RfcmVmZXJlbmNlIGxocywgY29uc3RfcmVmZXJlbmNlIHJocykgbm9leGNlcHQK
LSAgICB7Ci0gICAgICAgIGNvbnN0IGF1dG8gbGhzX3R5cGUgPSBsaHMudHlwZSgpOwotICAgICAg
ICBjb25zdCBhdXRvIHJoc190eXBlID0gcmhzLnR5cGUoKTsKLQotICAgICAgICBpZiAobGhzX3R5
cGUgPT0gcmhzX3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAobGhzX3R5cGUp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAqbGhzLm1fdmFsdWUu
YXJyYXkgPT0gKnJocy5tX3ZhbHVlLmFycmF5OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiAqbGhzLm1fdmFsdWUub2JqZWN0ID09ICpyaHMubV92YWx1ZS5v
YmplY3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6
bnVsbDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmlu
ZzoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAqbGhzLm1f
dmFsdWUuc3RyaW5nID09ICpyaHMubV92YWx1ZS5zdHJpbmc7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBsaHMubV92YWx1ZS5ib29sZWFuID09IHJocy5t
X3ZhbHVlLmJvb2xlYW47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPT0gcmhzLm1fdmFsdWUu
bnVtYmVyX2ludGVnZXI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCA9PSByaHMubV92YWx1
ZS5udW1iZXJfdW5zaWduZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlLm51bWJlcl9mbG9hdCA9PSByaHMubV92YWx1ZS5u
dW1iZXJfZmxvYXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2Ug
aWYgKGxoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyIGFuZCByaHNfdHlwZSA9PSB2
YWx1ZV90OjpudW1iZXJfZmxvYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxudW1iZXJfZmxvYXRfdD4obGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIpID09IHJo
cy5tX3ZhbHVlLm51bWJlcl9mbG9hdDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChsaHNf
dHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfZmxvYXQgYW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51
bWJlcl9pbnRlZ2VyKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUu
bnVtYmVyX2Zsb2F0ID09IHN0YXRpY19jYXN0PG51bWJlcl9mbG9hdF90PihyaHMubV92YWx1ZS5u
dW1iZXJfaW50ZWdlcik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0g
dmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkIGFuZCByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJf
ZmxvYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxudW1iZXJf
ZmxvYXRfdD4obGhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKSA9PSByaHMubV92YWx1ZS5udW1i
ZXJfZmxvYXQ7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0gdmFsdWVf
dDo6bnVtYmVyX2Zsb2F0IGFuZCByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsaHMubV92YWx1ZS5udW1iZXJfZmxvYXQg
PT0gc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+KHJocy5tX3ZhbHVlLm51bWJlcl91bnNpZ25l
ZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0gdmFsdWVfdDo6bnVt
YmVyX3Vuc2lnbmVkIGFuZCByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfaW50ZWdlcikKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG51bWJlcl9pbnRlZ2VyX3Q+
KGxocy5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCkgPT0gcmhzLm1fdmFsdWUubnVtYmVyX2ludGVn
ZXI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0gdmFsdWVfdDo6bnVt
YmVyX2ludGVnZXIgYW5kIHJoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25lZCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGxocy5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID09
IHN0YXRpY19jYXN0PG51bWJlcl9pbnRlZ2VyX3Q+KHJocy5tX3ZhbHVlLm51bWJlcl91bnNpZ25l
ZCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLyoh
Ci0gICAgQGJyaWVmIGNvbXBhcmlzb246IGVxdWFsCi0gICAgQGNvcHlkb2Mgb3BlcmF0b3I9PShj
b25zdF9yZWZlcmVuY2UsIGNvbnN0X3JlZmVyZW5jZSkKLSAgICAqLwotICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFNjYWxhclR5cGUsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICAgICAg
ICAgICBzdGQ6OmlzX3NjYWxhcjxTY2FsYXJUeXBlPjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgot
ICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3RfcmVmZXJlbmNlIGxocywgY29uc3QgU2Nh
bGFyVHlwZSByaHMpIG5vZXhjZXB0Ci0gICAgewotICAgICAgICByZXR1cm4gKGxocyA9PSBiYXNp
Y19qc29uKHJocykpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBjb21wYXJpc29uOiBl
cXVhbAotICAgIEBjb3B5ZG9jIG9wZXJhdG9yPT0oY29uc3RfcmVmZXJlbmNlLCBjb25zdF9yZWZl
cmVuY2UpCi0gICAgKi8KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTY2FsYXJUeXBlLCB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgICAgICAgc3RkOjppc19zY2FsYXI8U2NhbGFy
VHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4KLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFNjYWxhclR5cGUgbGhzLCBjb25zdF9yZWZlcmVuY2UgcmhzKSBub2V4Y2VwdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIChiYXNpY19qc29uKGxocykgPT0gcmhzKTsKLSAgICB9Ci0KLSAg
ICAvKiEKLSAgICBAYnJpZWYgY29tcGFyaXNvbjogbm90IGVxdWFsCi0KLSAgICBDb21wYXJlcyB0
d28gSlNPTiB2YWx1ZXMgZm9yIGluZXF1YWxpdHkgYnkgY2FsY3VsYXRpbmcgYG5vdCAobGhzID09
IHJocylgLgotCi0gICAgQHBhcmFtW2luXSBsaHMgIGZpcnN0IEpTT04gdmFsdWUgdG8gY29uc2lk
ZXIKLSAgICBAcGFyYW1baW5dIHJocyAgc2Vjb25kIEpTT04gdmFsdWUgdG8gY29uc2lkZXIKLSAg
ICBAcmV0dXJuIHdoZXRoZXIgdGhlIHZhbHVlcyBAYSBsaHMgYW5kIEBhIHJocyBhcmUgbm90IGVx
dWFsCi0KLSAgICBAY29tcGxleGl0eSBMaW5lYXIuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4
YW1wbGUgZGVtb25zdHJhdGVzIGNvbXBhcmluZyBzZXZlcmFsIEpTT04KLSAgICB0eXBlcy4sb3Bl
cmF0b3JfX25vdGVxdWFsfQotCi0gICAgQHNpbmNlIHZlcnNpb24gMS4wLjAKLSAgICAqLwotICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yIT0oY29uc3RfcmVmZXJlbmNlIGxocywgY29uc3RfcmVmZXJl
bmNlIHJocykgbm9leGNlcHQKLSAgICB7Ci0gICAgICAgIHJldHVybiBub3QgKGxocyA9PSByaHMp
OwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBjb21wYXJpc29uOiBub3QgZXF1YWwKLSAg
ICBAY29weWRvYyBvcGVyYXRvciE9KGNvbnN0X3JlZmVyZW5jZSwgY29uc3RfcmVmZXJlbmNlKQot
ICAgICovCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgU2NhbGFyVHlwZSwgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8Ci0gICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2NhbGFyPFNjYWxhclR5cGU+Ojp2
YWx1ZSwgaW50Pjo6dHlwZSA9IDA+Ci0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdF9y
ZWZlcmVuY2UgbGhzLCBjb25zdCBTY2FsYXJUeXBlIHJocykgbm9leGNlcHQKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAobGhzICE9IGJhc2ljX2pzb24ocmhzKSk7Ci0gICAgfQotCi0gICAgLyohCi0g
ICAgQGJyaWVmIGNvbXBhcmlzb246IG5vdCBlcXVhbAotICAgIEBjb3B5ZG9jIG9wZXJhdG9yIT0o
Y29uc3RfcmVmZXJlbmNlLCBjb25zdF9yZWZlcmVuY2UpCi0gICAgKi8KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBTY2FsYXJUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICAg
ICAgICAgc3RkOjppc19zY2FsYXI8U2NhbGFyVHlwZT46OnZhbHVlLCBpbnQ+Ojp0eXBlID0gMD4K
LSAgICBmcmllbmQgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNjYWxhclR5cGUgbGhzLCBjb25zdF9y
ZWZlcmVuY2UgcmhzKSBub2V4Y2VwdAotICAgIHsKLSAgICAgICAgcmV0dXJuIChiYXNpY19qc29u
KGxocykgIT0gcmhzKTsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgY29tcGFyaXNvbjog
bGVzcyB0aGFuCi0KLSAgICBDb21wYXJlcyB3aGV0aGVyIG9uZSBKU09OIHZhbHVlIEBhIGxocyBp
cyBsZXNzIHRoYW4gYW5vdGhlciBKU09OIHZhbHVlIEBhCi0gICAgcmhzIGFjY29yZGluZyB0byB0
aGUgZm9sbG93aW5nIHJ1bGVzOgotICAgIC0gSWYgQGEgbGhzIGFuZCBAYSByaHMgaGF2ZSB0aGUg
c2FtZSB0eXBlLCB0aGUgdmFsdWVzIGFyZSBjb21wYXJlZCB1c2luZwotICAgICAgdGhlIGRlZmF1
bHQgYDxgIG9wZXJhdG9yLgotICAgIC0gSW50ZWdlciBhbmQgZmxvYXRpbmctcG9pbnQgbnVtYmVy
cyBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgYmVmb3JlCi0gICAgICBjb21wYXJpc29uCi0g
ICAgLSBJbiBjYXNlIEBhIGxocyBhbmQgQGEgcmhzIGhhdmUgZGlmZmVyZW50IHR5cGVzLCB0aGUg
dmFsdWVzIGFyZSBpZ25vcmVkCi0gICAgICBhbmQgdGhlIG9yZGVyIG9mIHRoZSB0eXBlcyBpcyBj
b25zaWRlcmVkLCBzZWUKLSAgICAgIEByZWYgb3BlcmF0b3I8KGNvbnN0IHZhbHVlX3QsIGNvbnN0
IHZhbHVlX3QpLgotCi0gICAgQHBhcmFtW2luXSBsaHMgIGZpcnN0IEpTT04gdmFsdWUgdG8gY29u
c2lkZXIKLSAgICBAcGFyYW1baW5dIHJocyAgc2Vjb25kIEpTT04gdmFsdWUgdG8gY29uc2lkZXIK
LSAgICBAcmV0dXJuIHdoZXRoZXIgQGEgbGhzIGlzIGxlc3MgdGhhbiBAYSByaHMKLQotICAgIEBj
b21wbGV4aXR5IExpbmVhci4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBkZW1vbnN0
cmF0ZXMgY29tcGFyaW5nIHNldmVyYWwgSlNPTgotICAgIHR5cGVzLixvcGVyYXRvcl9fbGVzc30K
LQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICBmcmllbmQgYm9vbCBvcGVy
YXRvcjwoY29uc3RfcmVmZXJlbmNlIGxocywgY29uc3RfcmVmZXJlbmNlIHJocykgbm9leGNlcHQK
LSAgICB7Ci0gICAgICAgIGNvbnN0IGF1dG8gbGhzX3R5cGUgPSBsaHMudHlwZSgpOwotICAgICAg
ICBjb25zdCBhdXRvIHJoc190eXBlID0gcmhzLnR5cGUoKTsKLQotICAgICAgICBpZiAobGhzX3R5
cGUgPT0gcmhzX3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAobGhzX3R5cGUp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAqbGhzLm1fdmFsdWUu
YXJyYXkgPCAqcmhzLm1fdmFsdWUuYXJyYXk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICpsaHMubV92YWx1ZS5vYmplY3QgPCAqcmhzLm1fdmFsdWUub2Jq
ZWN0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51
bGw6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6c3RyaW5n
OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpsaHMubV92
YWx1ZS5zdHJpbmcgPCAqcmhzLm1fdmFsdWUuc3RyaW5nOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmJvb2xlYW46Ci0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUuYm9vbGVhbiA8IHJocy5tX3Zh
bHVlLmJvb2xlYW47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNhc2UgdmFs
dWVfdDo6bnVtYmVyX2ludGVnZXI6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPCByaHMubV92YWx1ZS5udW1i
ZXJfaW50ZWdlcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY2FzZSB2YWx1
ZV90OjpudW1iZXJfdW5zaWduZWQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDwgcmhzLm1fdmFsdWUubnVt
YmVyX3Vuc2lnbmVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjYXNlIHZh
bHVlX3Q6Om51bWJlcl9mbG9hdDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBsaHMubV92YWx1ZS5udW1iZXJfZmxvYXQgPCByaHMubV92YWx1ZS5udW1iZXJf
ZmxvYXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGxo
c190eXBlID09IHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyIGFuZCByaHNfdHlwZSA9PSB2YWx1ZV90
OjpudW1iZXJfZmxvYXQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxudW1iZXJfZmxvYXRfdD4obGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIpIDwgcmhzLm1fdmFs
dWUubnVtYmVyX2Zsb2F0OwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09
IHZhbHVlX3Q6Om51bWJlcl9mbG9hdCBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX2lu
dGVnZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsaHMubV92YWx1ZS5udW1iZXJf
ZmxvYXQgPCBzdGF0aWNfY2FzdDxudW1iZXJfZmxvYXRfdD4ocmhzLm1fdmFsdWUubnVtYmVyX2lu
dGVnZXIpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVlX3Q6
Om51bWJlcl91bnNpZ25lZCBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX2Zsb2F0KQot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnVtYmVyX2Zsb2F0X3Q+
KGxocy5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCkgPCByaHMubV92YWx1ZS5udW1iZXJfZmxvYXQ7
Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobGhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVy
X2Zsb2F0IGFuZCByaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBsaHMubV92YWx1ZS5udW1iZXJfZmxvYXQgPCBzdGF0aWNf
Y2FzdDxudW1iZXJfZmxvYXRfdD4ocmhzLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKLSAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmIChsaHNfdHlwZSA9PSB2YWx1ZV90OjpudW1iZXJfaW50ZWdl
ciBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkKQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbGhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPCBzdGF0aWNfY2Fz
dDxudW1iZXJfaW50ZWdlcl90PihyaHMubV92YWx1ZS5udW1iZXJfdW5zaWduZWQpOwotICAgICAg
ICB9Ci0gICAgICAgIGVsc2UgaWYgKGxoc190eXBlID09IHZhbHVlX3Q6Om51bWJlcl91bnNpZ25l
ZCBhbmQgcmhzX3R5cGUgPT0gdmFsdWVfdDo6bnVtYmVyX2ludGVnZXIpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxudW1iZXJfaW50ZWdlcl90PihsaHMubV92YWx1
ZS5udW1iZXJfdW5zaWduZWQpIDwgcmhzLm1fdmFsdWUubnVtYmVyX2ludGVnZXI7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBXZSBvbmx5IHJlYWNoIHRoaXMgbGluZSBpZiB3ZSBjYW5ub3QgY29t
cGFyZSB2YWx1ZXMuIEluIHRoYXQgY2FzZSwKLSAgICAgICAgLy8gd2UgY29tcGFyZSB0eXBlcy4g
Tm90ZSB3ZSBoYXZlIHRvIGNhbGwgdGhlIG9wZXJhdG9yIGV4cGxpY2l0bHksCi0gICAgICAgIC8v
IGJlY2F1c2UgTVNWQyBoYXMgcHJvYmxlbXMgb3RoZXJ3aXNlLgotICAgICAgICByZXR1cm4gb3Bl
cmF0b3I8KGxoc190eXBlLCByaHNfdHlwZSk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVm
IGNvbXBhcmlzb246IGxlc3MgdGhhbiBvciBlcXVhbAotCi0gICAgQ29tcGFyZXMgd2hldGhlciBv
bmUgSlNPTiB2YWx1ZSBAYSBsaHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGFub3RoZXIKLSAg
ICBKU09OIHZhbHVlIGJ5IGNhbGN1bGF0aW5nIGBub3QgKHJocyA8IGxocylgLgotCi0gICAgQHBh
cmFtW2luXSBsaHMgIGZpcnN0IEpTT04gdmFsdWUgdG8gY29uc2lkZXIKLSAgICBAcGFyYW1baW5d
IHJocyAgc2Vjb25kIEpTT04gdmFsdWUgdG8gY29uc2lkZXIKLSAgICBAcmV0dXJuIHdoZXRoZXIg
QGEgbGhzIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBAYSByaHMKLQotICAgIEBjb21wbGV4aXR5
IExpbmVhci4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgY29t
cGFyaW5nIHNldmVyYWwgSlNPTgotICAgIHR5cGVzLixvcGVyYXRvcl9fZ3JlYXRlcn0KLQotICAg
IEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjw9
KGNvbnN0X3JlZmVyZW5jZSBsaHMsIGNvbnN0X3JlZmVyZW5jZSByaHMpIG5vZXhjZXB0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbm90IChyaHMgPCBsaHMpOwotICAgIH0KLQotICAgIC8qIQotICAg
IEBicmllZiBjb21wYXJpc29uOiBncmVhdGVyIHRoYW4KLQotICAgIENvbXBhcmVzIHdoZXRoZXIg
b25lIEpTT04gdmFsdWUgQGEgbGhzIGlzIGdyZWF0ZXIgdGhhbiBhbm90aGVyCi0gICAgSlNPTiB2
YWx1ZSBieSBjYWxjdWxhdGluZyBgbm90IChsaHMgPD0gcmhzKWAuCi0KLSAgICBAcGFyYW1baW5d
IGxocyAgZmlyc3QgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgotICAgIEBwYXJhbVtpbl0gcmhzICBz
ZWNvbmQgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgotICAgIEByZXR1cm4gd2hldGhlciBAYSBsaHMg
aXMgZ3JlYXRlciB0aGFuIHRvIEBhIHJocwotCi0gICAgQGNvbXBsZXhpdHkgTGluZWFyLgotCi0g
ICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGRlbW9uc3RyYXRlcyBjb21wYXJpbmcgc2V2ZXJh
bCBKU09OCi0gICAgdHlwZXMuLG9wZXJhdG9yX19sZXNzZXF1YWx9Ci0KLSAgICBAc2luY2UgdmVy
c2lvbiAxLjAuMAotICAgICovCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+KGNvbnN0X3JlZmVy
ZW5jZSBsaHMsIGNvbnN0X3JlZmVyZW5jZSByaHMpIG5vZXhjZXB0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbm90IChsaHMgPD0gcmhzKTsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgY29t
cGFyaXNvbjogZ3JlYXRlciB0aGFuIG9yIGVxdWFsCi0KLSAgICBDb21wYXJlcyB3aGV0aGVyIG9u
ZSBKU09OIHZhbHVlIEBhIGxocyBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYW5vdGhlcgot
ICAgIEpTT04gdmFsdWUgYnkgY2FsY3VsYXRpbmcgYG5vdCAobGhzIDwgcmhzKWAuCi0KLSAgICBA
cGFyYW1baW5dIGxocyAgZmlyc3QgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgotICAgIEBwYXJhbVtp
bl0gcmhzICBzZWNvbmQgSlNPTiB2YWx1ZSB0byBjb25zaWRlcgotICAgIEByZXR1cm4gd2hldGhl
ciBAYSBsaHMgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIEBhIHJocwotCi0gICAgQGNvbXBs
ZXhpdHkgTGluZWFyLgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGRlbW9uc3RyYXRl
cyBjb21wYXJpbmcgc2V2ZXJhbCBKU09OCi0gICAgdHlwZXMuLG9wZXJhdG9yX19ncmVhdGVyZXF1
YWx9Ci0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAgZnJpZW5kIGJvb2wg
b3BlcmF0b3I+PShjb25zdF9yZWZlcmVuY2UgbGhzLCBjb25zdF9yZWZlcmVuY2UgcmhzKSBub2V4
Y2VwdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG5vdCAobGhzIDwgcmhzKTsKLSAgICB9Ci0KLSAg
ICAvLy8gQH0KLQotCi0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIHNlcmlhbGl6YXRp
b24gLy8KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgICAvLy8gQG5hbWUgc2VyaWFsaXph
dGlvbgotICAgIC8vLyBAewotCi0gICAgLyohCi0gICAgQGJyaWVmIHNlcmlhbGl6ZSB0byBzdHJl
YW0KLQotICAgIFNlcmlhbGl6ZSB0aGUgZ2l2ZW4gSlNPTiB2YWx1ZSBAYSBqIHRvIHRoZSBvdXRw
dXQgc3RyZWFtIEBhIG8uIFRoZSBKU09OCi0gICAgdmFsdWUgd2lsbCBiZSBzZXJpYWxpemVkIHVz
aW5nIHRoZSBAcmVmIGR1bXAgbWVtYmVyIGZ1bmN0aW9uLiBUaGUKLSAgICBpbmRlbnRhdGlvbiBv
ZiB0aGUgb3V0cHV0IGNhbiBiZSBjb250cm9sbGVkIHdpdGggdGhlIG1lbWJlciB2YXJpYWJsZQot
ICAgIGB3aWR0aGAgb2YgdGhlIG91dHB1dCBzdHJlYW0gQGEgby4gRm9yIGluc3RhbmNlLCB1c2lu
ZyB0aGUgbWFuaXB1bGF0b3IKLSAgICBgc3RkOjpzZXR3KDQpYCBvbiBAYSBvIHNldHMgdGhlIGlu
ZGVudGF0aW9uIGxldmVsIHRvIGA0YCBhbmQgdGhlCi0gICAgc2VyaWFsaXphdGlvbiByZXN1bHQg
aXMgdGhlIHNhbWUgYXMgY2FsbGluZyBgZHVtcCg0KWAuCi0KLSAgICBAcGFyYW1baW4sb3V0XSBv
ICBzdHJlYW0gdG8gc2VyaWFsaXplIHRvCi0gICAgQHBhcmFtW2luXSBqICBKU09OIHZhbHVlIHRv
IHNlcmlhbGl6ZQotCi0gICAgQHJldHVybiB0aGUgc3RyZWFtIEBhIG8KLQotICAgIEBjb21wbGV4
aXR5IExpbmVhci4KLQotICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyB0
aGUgc2VyaWFsaXphdGlvbiB3aXRoIGRpZmZlcmVudAotICAgIHBhcmFtZXRlcnMgdG8gYHdpZHRo
YCB0byBhZGp1c3QgdGhlIGluZGVudGF0aW9uIGxldmVsLixvcGVyYXRvcl9zZXJpYWxpemV9Ci0K
LSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAgZnJpZW5kIHN0ZDo6b3N0cmVh
bSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG8sIGNvbnN0IGJhc2ljX2pzb24mIGopCi0gICAg
ewotICAgICAgICAvLyByZWFkIHdpZHRoIG1lbWJlciBhbmQgdXNlIGl0IGFzIGluZGVudGF0aW9u
IHBhcmFtZXRlciBpZiBub256ZXJvCi0gICAgICAgIGNvbnN0IGJvb2wgcHJldHR5X3ByaW50ID0g
KG8ud2lkdGgoKSA+IDApOwotICAgICAgICBjb25zdCBhdXRvIGluZGVudGF0aW9uID0gKHByZXR0
eV9wcmludCA/IG8ud2lkdGgoKSA6IDApOwotCi0gICAgICAgIC8vIHJlc2V0IHdpZHRoIHRvIDAg
Zm9yIHN1YnNlcXVlbnQgY2FsbHMgdG8gdGhpcyBzdHJlYW0KLSAgICAgICAgby53aWR0aCgwKTsK
LQotICAgICAgICAvLyBkbyB0aGUgYWN0dWFsIHNlcmlhbGl6YXRpb24KLSAgICAgICAgai5kdW1w
KG8sIHByZXR0eV9wcmludCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihpbmRlbnRhdGlvbikp
OwotCi0gICAgICAgIHJldHVybiBvOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBzZXJp
YWxpemUgdG8gc3RyZWFtCi0gICAgQGNvcHlkb2Mgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mLCBj
b25zdCBiYXNpY19qc29uJikKLSAgICAqLwotICAgIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJh
dG9yPj4oY29uc3QgYmFzaWNfanNvbiYgaiwgc3RkOjpvc3RyZWFtJiBvKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG8gPDwgajsKLSAgICB9Ci0KLSAgICAvLy8gQH0KLQotCi0gICAgLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCi0gICAgLy8gZGVzZXJpYWxpemF0aW9uIC8vCi0gICAgLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vCi0KLSAgICAvLy8gQG5hbWUgZGVzZXJpYWxpemF0aW9uCi0gICAgLy8vIEB7Ci0K
LSAgICAvKiEKLSAgICBAYnJpZWYgZGVzZXJpYWxpemUgZnJvbSBhbiBhcnJheQotCi0gICAgVGhp
cyBmdW5jdGlvbiByZWFkcyBmcm9tIGFuIGFycmF5IG9mIDEtYnl0ZSB2YWx1ZXMuCi0KLSAgICBA
cHJlIEVhY2ggZWxlbWVudCBvZiB0aGUgY29udGFpbmVyIGhhcyBhIHNpemUgb2YgMSBieXRlLiBW
aW9sYXRpbmcgdGhpcwotICAgIHByZWNvbmRpdGlvbiB5aWVsZHMgdW5kZWZpbmVkIGJlaGF2aW9y
LiAqKlRoaXMgcHJlY29uZGl0aW9uIGlzIGVuZm9yY2VkCi0gICAgd2l0aCBhIHN0YXRpYyBhc3Nl
cnRpb24uKioKLQotICAgIEBwYXJhbVtpbl0gYXJyYXkgIGFycmF5IHRvIHJlYWQgZnJvbQotICAg
IEBwYXJhbVtpbl0gY2IgIGEgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHR5cGUgQHJlZiBw
YXJzZXJfY2FsbGJhY2tfdAotICAgIHdoaWNoIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgZGVzZXJp
YWxpemF0aW9uIGJ5IGZpbHRlcmluZyB1bndhbnRlZCB2YWx1ZXMKLSAgICAob3B0aW9uYWwpCi0K
LSAgICBAcmV0dXJuIHJlc3VsdCBvZiB0aGUgZGVzZXJpYWxpemF0aW9uCi0KLSAgICBAY29tcGxl
eGl0eSBMaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQuIFRoZSBwYXJzZXIgaXMgYSBw
cmVkaWN0aXZlCi0gICAgTEwoMSkgcGFyc2VyLiBUaGUgY29tcGxleGl0eSBjYW4gYmUgaGlnaGVy
IGlmIHRoZSBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rpb24KLSAgICBAYSBjYiBoYXMgYSBzdXBlci1s
aW5lYXIgY29tcGxleGl0eS4KLQotICAgIEBub3RlIEEgVVRGLTggYnl0ZSBvcmRlciBtYXJrIGlz
IHNpbGVudGx5IGlnbm9yZWQuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgYmVsb3cg
ZGVtb25zdHJhdGVzIHRoZSBgcGFyc2UoKWAgZnVuY3Rpb24gcmVhZGluZwotICAgIGZyb20gYW4g
YXJyYXkuLHBhcnNlX19hcnJheV9fcGFyc2VyX2NhbGxiYWNrX3R9Ci0KLSAgICBAc2luY2UgdmVy
c2lvbiAyLjAuMwotICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgVCwgc3RkOjpzaXplX3QgTj4K
LSAgICBzdGF0aWMgYmFzaWNfanNvbiBwYXJzZShUICgmYXJyYXkpW05dLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlcl9jYWxsYmFja190IGNiID0gbnVsbHB0cikKLSAg
ICB7Ci0gICAgICAgIC8vIGRlbGVnYXRlIHRoZSBjYWxsIHRvIHRoZSBpdGVyYXRvci1yYW5nZSBw
YXJzZSBvdmVybG9hZAotICAgICAgICByZXR1cm4gcGFyc2Uoc3RkOjpiZWdpbihhcnJheSksIHN0
ZDo6ZW5kKGFycmF5KSwgY2IpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBkZXNlcmlh
bGl6ZSBmcm9tIHN0cmluZyBsaXRlcmFsCi0KLSAgICBAdHBhcmFtIENoYXJUIGNoYXJhY3Rlci9s
aXRlcmFsIHR5cGUgd2l0aCBzaXplIG9mIDEgYnl0ZQotICAgIEBwYXJhbVtpbl0gcyAgc3RyaW5n
IGxpdGVyYWwgdG8gcmVhZCBhIHNlcmlhbGl6ZWQgSlNPTiB2YWx1ZSBmcm9tCi0gICAgQHBhcmFt
W2luXSBjYiBhIHBhcnNlciBjYWxsYmFjayBmdW5jdGlvbiBvZiB0eXBlIEByZWYgcGFyc2VyX2Nh
bGxiYWNrX3QKLSAgICB3aGljaCBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIGRlc2VyaWFsaXphdGlv
biBieSBmaWx0ZXJpbmcgdW53YW50ZWQgdmFsdWVzCi0gICAgKG9wdGlvbmFsKQotCi0gICAgQHJl
dHVybiByZXN1bHQgb2YgdGhlIGRlc2VyaWFsaXphdGlvbgotCi0gICAgQGNvbXBsZXhpdHkgTGlu
ZWFyIGluIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0LiBUaGUgcGFyc2VyIGlzIGEgcHJlZGljdGl2
ZQotICAgIExMKDEpIHBhcnNlci4gVGhlIGNvbXBsZXhpdHkgY2FuIGJlIGhpZ2hlciBpZiB0aGUg
cGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uCi0gICAgQGEgY2IgaGFzIGEgc3VwZXItbGluZWFyIGNv
bXBsZXhpdHkuCi0KLSAgICBAbm90ZSBBIFVURi04IGJ5dGUgb3JkZXIgbWFyayBpcyBzaWxlbnRs
eSBpZ25vcmVkLgotICAgIEBub3RlIFN0cmluZyBjb250YWluZXJzIGxpa2UgYHN0ZDo6c3RyaW5n
YCBvciBAcmVmIHN0cmluZ190IGNhbiBiZSBwYXJzZWQKLSAgICAgICAgICB3aXRoIEByZWYgcGFy
c2UoY29uc3QgQ29udGlndW91c0NvbnRhaW5lciYsIGNvbnN0IHBhcnNlcl9jYWxsYmFja190KQot
Ci0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IGRlbW9uc3RyYXRlcyB0aGUgYHBh
cnNlKClgIGZ1bmN0aW9uIHdpdGgKLSAgICBhbmQgd2l0aG91dCBjYWxsYmFjayBmdW5jdGlvbi4s
cGFyc2VfX3N0cmluZ19fcGFyc2VyX2NhbGxiYWNrX3R9Ci0KLSAgICBAc2EgQHJlZiBwYXJzZShz
dGQ6OmlzdHJlYW0mLCBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCkgZm9yIGEgdmVyc2lvbiB0aGF0
Ci0gICAgcmVhZHMgZnJvbSBhbiBpbnB1dCBzdHJlYW0KLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEu
MC4wIChvcmlnaW5hbGx5IGZvciBAcmVmIHN0cmluZ190KQotICAgICovCi0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhclQsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAotICAgICAgICAgICAgICAg
ICBzdGQ6OmlzX3BvaW50ZXI8Q2hhclQ+Ojp2YWx1ZSBhbmQKLSAgICAgICAgICAgICAgICAgc3Rk
Ojppc19pbnRlZ3JhbDx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPENoYXJUPjo6dHlwZT46
OnZhbHVlIGFuZAotICAgICAgICAgICAgICAgICBzaXplb2YodHlwZW5hbWUgc3RkOjpyZW1vdmVf
cG9pbnRlcjxDaGFyVD46OnR5cGUpID09IDEsIGludD46OnR5cGUgPSAwPgotICAgIHN0YXRpYyBi
YXNpY19qc29uIHBhcnNlKGNvbnN0IENoYXJUIHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QgY2IgPSBudWxscHRyKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIHBhcnNlcihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihzKSwgY2IpLnBhcnNl
KCk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIGRlc2VyaWFsaXplIGZyb20gc3RyZWFt
Ci0KLSAgICBAcGFyYW1baW4sb3V0XSBpICBzdHJlYW0gdG8gcmVhZCBhIHNlcmlhbGl6ZWQgSlNP
TiB2YWx1ZSBmcm9tCi0gICAgQHBhcmFtW2luXSBjYiBhIHBhcnNlciBjYWxsYmFjayBmdW5jdGlv
biBvZiB0eXBlIEByZWYgcGFyc2VyX2NhbGxiYWNrX3QKLSAgICB3aGljaCBpcyB1c2VkIHRvIGNv
bnRyb2wgdGhlIGRlc2VyaWFsaXphdGlvbiBieSBmaWx0ZXJpbmcgdW53YW50ZWQgdmFsdWVzCi0g
ICAgKG9wdGlvbmFsKQotCi0gICAgQHJldHVybiByZXN1bHQgb2YgdGhlIGRlc2VyaWFsaXphdGlv
bgotCi0gICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0LiBU
aGUgcGFyc2VyIGlzIGEgcHJlZGljdGl2ZQotICAgIExMKDEpIHBhcnNlci4gVGhlIGNvbXBsZXhp
dHkgY2FuIGJlIGhpZ2hlciBpZiB0aGUgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9uCi0gICAgQGEg
Y2IgaGFzIGEgc3VwZXItbGluZWFyIGNvbXBsZXhpdHkuCi0KLSAgICBAbm90ZSBBIFVURi04IGJ5
dGUgb3JkZXIgbWFyayBpcyBzaWxlbnRseSBpZ25vcmVkLgotCi0gICAgQGxpdmVleGFtcGxle1Ro
ZSBleGFtcGxlIGJlbG93IGRlbW9uc3RyYXRlcyB0aGUgYHBhcnNlKClgIGZ1bmN0aW9uIHdpdGgK
LSAgICBhbmQgd2l0aG91dCBjYWxsYmFjayBmdW5jdGlvbi4scGFyc2VfX2lzdHJlYW1fX3BhcnNl
cl9jYWxsYmFja190fQotCi0gICAgQHNhIEByZWYgcGFyc2UoY29uc3QgQ2hhclQsIGNvbnN0IHBh
cnNlcl9jYWxsYmFja190KSBmb3IgYSB2ZXJzaW9uCi0gICAgdGhhdCByZWFkcyBmcm9tIGEgc3Ry
aW5nCi0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAgc3RhdGljIGJhc2lj
X2pzb24gcGFyc2Uoc3RkOjppc3RyZWFtJiBpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHBhcnNlcl9jYWxsYmFja190IGNiID0gbnVsbHB0cikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBwYXJzZXIoaSwgY2IpLnBhcnNlKCk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGNvcHlk
b2MgcGFyc2Uoc3RkOjppc3RyZWFtJiwgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QpCi0gICAgKi8K
LSAgICBzdGF0aWMgYmFzaWNfanNvbiBwYXJzZShzdGQ6OmlzdHJlYW0mJiBpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlcl9jYWxsYmFja190IGNiID0gbnVsbHB0cikK
LSAgICB7Ci0gICAgICAgIHJldHVybiBwYXJzZXIoaSwgY2IpLnBhcnNlKCk7Ci0gICAgfQotCi0g
ICAgLyohCi0gICAgQGJyaWVmIGRlc2VyaWFsaXplIGZyb20gYW4gaXRlcmF0b3IgcmFuZ2Ugd2l0
aCBjb250aWd1b3VzIHN0b3JhZ2UKLQotICAgIFRoaXMgZnVuY3Rpb24gcmVhZHMgZnJvbSBhbiBp
dGVyYXRvciByYW5nZSBvZiBhIGNvbnRhaW5lciB3aXRoIGNvbnRpZ3VvdXMKLSAgICBzdG9yYWdl
IG9mIDEtYnl0ZSB2YWx1ZXMuIENvbXBhdGlibGUgY29udGFpbmVyIHR5cGVzIGluY2x1ZGUKLSAg
ICBgc3RkOjp2ZWN0b3JgLCBgc3RkOjpzdHJpbmdgLCBgc3RkOjphcnJheWAsIGBzdGQ6OnZhbGFy
cmF5YCwgYW5kCi0gICAgYHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdGAuIEZ1cnRoZXJtb3JlLCBDLXN0
eWxlIGFycmF5cyBjYW4gYmUgdXNlZCB3aXRoCi0gICAgYHN0ZDo6YmVnaW4oKWAvYHN0ZDo6ZW5k
KClgLiBVc2VyLWRlZmluZWQgY29udGFpbmVycyBjYW4gYmUgdXNlZCBhcyBsb25nCi0gICAgYXMg
dGhleSBpbXBsZW1lbnQgcmFuZG9tLWFjY2VzcyBpdGVyYXRvcnMgYW5kIGEgY29udGlndW91cyBz
dG9yYWdlLgotCi0gICAgQHByZSBUaGUgaXRlcmF0b3IgcmFuZ2UgaXMgY29udGlndW91cy4gVmlv
bGF0aW5nIHRoaXMgcHJlY29uZGl0aW9uIHlpZWxkcwotICAgIHVuZGVmaW5lZCBiZWhhdmlvci4g
KipUaGlzIHByZWNvbmRpdGlvbiBpcyBlbmZvcmNlZCB3aXRoIGFuIGFzc2VydGlvbi4qKgotICAg
IEBwcmUgRWFjaCBlbGVtZW50IGluIHRoZSByYW5nZSBoYXMgYSBzaXplIG9mIDEgYnl0ZS4gVmlv
bGF0aW5nIHRoaXMKLSAgICBwcmVjb25kaXRpb24geWllbGRzIHVuZGVmaW5lZCBiZWhhdmlvci4g
KipUaGlzIHByZWNvbmRpdGlvbiBpcyBlbmZvcmNlZAotICAgIHdpdGggYSBzdGF0aWMgYXNzZXJ0
aW9uLioqCi0KLSAgICBAd2FybmluZyBUaGVyZSBpcyBubyB3YXkgdG8gZW5mb3JjZSBhbGwgcHJl
Y29uZGl0aW9ucyBhdCBjb21waWxlLXRpbWUuIElmCi0gICAgICAgICAgICAgdGhlIGZ1bmN0aW9u
IGlzIGNhbGxlZCB3aXRoIG5vbmNvbXBsaWFudCBpdGVyYXRvcnMgYW5kIHdpdGgKLSAgICAgICAg
ICAgICBhc3NlcnRpb25zIHN3aXRjaGVkIG9mZiwgdGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZCBh
bmQgd2lsbCBtb3N0Ci0gICAgICAgICAgICAgbGlrZWx5IHlpZWxkIHNlZ21lbnRhdGlvbiB2aW9s
YXRpb24uCi0KLSAgICBAdHBhcmFtIEl0ZXJhdG9yVHlwZSBpdGVyYXRvciBvZiBjb250YWluZXIg
d2l0aCBjb250aWd1b3VzIHN0b3JhZ2UKLSAgICBAcGFyYW1baW5dIGZpcnN0ICBiZWdpbiBvZiB0
aGUgcmFuZ2UgdG8gcGFyc2UgKGluY2x1ZGVkKQotICAgIEBwYXJhbVtpbl0gbGFzdCAgZW5kIG9m
IHRoZSByYW5nZSB0byBwYXJzZSAoZXhjbHVkZWQpCi0gICAgQHBhcmFtW2luXSBjYiAgYSBwYXJz
ZXIgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdHlwZSBAcmVmIHBhcnNlcl9jYWxsYmFja190Ci0gICAg
d2hpY2ggaXMgdXNlZCB0byBjb250cm9sIHRoZSBkZXNlcmlhbGl6YXRpb24gYnkgZmlsdGVyaW5n
IHVud2FudGVkIHZhbHVlcwotICAgIChvcHRpb25hbCkKLQotICAgIEByZXR1cm4gcmVzdWx0IG9m
IHRoZSBkZXNlcmlhbGl6YXRpb24KLQotICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbGVu
Z3RoIG9mIHRoZSBpbnB1dC4gVGhlIHBhcnNlciBpcyBhIHByZWRpY3RpdmUKLSAgICBMTCgxKSBw
YXJzZXIuIFRoZSBjb21wbGV4aXR5IGNhbiBiZSBoaWdoZXIgaWYgdGhlIHBhcnNlciBjYWxsYmFj
ayBmdW5jdGlvbgotICAgIEBhIGNiIGhhcyBhIHN1cGVyLWxpbmVhciBjb21wbGV4aXR5LgotCi0g
ICAgQG5vdGUgQSBVVEYtOCBieXRlIG9yZGVyIG1hcmsgaXMgc2lsZW50bHkgaWdub3JlZC4KLQot
ICAgIEBsaXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBiZWxvdyBkZW1vbnN0cmF0ZXMgdGhlIGBwYXJz
ZSgpYCBmdW5jdGlvbiByZWFkaW5nCi0gICAgZnJvbSBhbiBpdGVyYXRvciByYW5nZS4scGFyc2Vf
X2l0ZXJhdG9ydHlwZV9fcGFyc2VyX2NhbGxiYWNrX3R9Ci0KLSAgICBAc2luY2UgdmVyc2lvbiAy
LjAuMwotICAgICovCi0gICAgdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3JUeXBlLCB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgICAgICAgc3RkOjppc19iYXNlX29mPAotICAgICAg
ICAgICAgICAgICAgICAgc3RkOjpyYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKLSAgICAgICAg
ICAgICAgICAgICAgIHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3JfdHJhaXRzPEl0ZXJhdG9yVHlwZT46
Oml0ZXJhdG9yX2NhdGVnb3J5Pjo6dmFsdWUsIGludD46OnR5cGUgPSAwPgotICAgIHN0YXRpYyBi
YXNpY19qc29uIHBhcnNlKEl0ZXJhdG9yVHlwZSBmaXJzdCwgSXRlcmF0b3JUeXBlIGxhc3QsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QgY2IgPSBu
dWxscHRyKQotICAgIHsKLSAgICAgICAgLy8gYXNzZXJ0aW9uIHRvIGNoZWNrIHRoYXQgdGhlIGl0
ZXJhdG9yIHJhbmdlIGlzIGluZGVlZCBjb250aWd1b3VzLAotICAgICAgICAvLyBzZWUgaHR0cDov
L3N0YWNrb3ZlcmZsb3cuY29tL2EvMzUwMDg4NDIvMjY2Mzc4IGZvciBtb3JlIGRpc2N1c3Npb24K
LSAgICAgICAgYXNzZXJ0KHN0ZDo6YWNjdW11bGF0ZShmaXJzdCwgbGFzdCwgc3RkOjpwYWlyPGJv
b2wsIGludD4odHJ1ZSwgMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyZmaXJz
dF0oc3RkOjpwYWlyPGJvb2wsIGludD4gcmVzLCBkZWNsdHlwZSgqZmlyc3QpIHZhbCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmVzLmZpcnN0ICY9ICh2YWwgPT0gKihzdGQ6Om5leHQoc3RkOjph
ZGRyZXNzb2YoKmZpcnN0KSwgcmVzLnNlY29uZCsrKSkpOwotICAgICAgICAgICAgcmV0dXJuIHJl
czsKLSAgICAgICAgfSkuZmlyc3QpOwotCi0gICAgICAgIC8vIGFzc2VydGlvbiB0byBjaGVjayB0
aGF0IGVhY2ggZWxlbWVudCBpcyAxIGJ5dGUgbG9uZwotICAgICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZih0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvclR5cGU+Ojp2YWx1ZV90
eXBlKSA9PSAxLAotICAgICAgICAgICAgICAgICAgICAgICJlYWNoIGVsZW1lbnQgaW4gdGhlIGl0
ZXJhdG9yIHJhbmdlIG11c3QgaGF2ZSB0aGUgc2l6ZSBvZiAxIGJ5dGUiKTsKLQotICAgICAgICAv
LyBpZiBpdGVyYXRvciByYW5nZSBpcyBlbXB0eSwgY3JlYXRlIGEgcGFyc2VyIHdpdGggYW4gZW1w
dHkgc3RyaW5nCi0gICAgICAgIC8vIHRvIGdlbmVyYXRlICJ1bmV4cGVjdGVkIEVPRiIgZXJyb3Ig
bWVzc2FnZQotICAgICAgICBpZiAoc3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCkgPD0gMCkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHBhcnNlcigiIikucGFyc2UoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHJldHVybiBwYXJzZXIoZmlyc3QsIGxhc3QsIGNiKS5wYXJzZSgpOwotICAg
IH0KLQotICAgIC8qIQotICAgIEBicmllZiBkZXNlcmlhbGl6ZSBmcm9tIGEgY29udGFpbmVyIHdp
dGggY29udGlndW91cyBzdG9yYWdlCi0KLSAgICBUaGlzIGZ1bmN0aW9uIHJlYWRzIGZyb20gYSBj
b250YWluZXIgd2l0aCBjb250aWd1b3VzIHN0b3JhZ2Ugb2YgMS1ieXRlCi0gICAgdmFsdWVzLiBD
b21wYXRpYmxlIGNvbnRhaW5lciB0eXBlcyBpbmNsdWRlIGBzdGQ6OnZlY3RvcmAsIGBzdGQ6OnN0
cmluZ2AsCi0gICAgYHN0ZDo6YXJyYXlgLCBhbmQgYHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdGAuIFVz
ZXItZGVmaW5lZCBjb250YWluZXJzIGNhbiBiZQotICAgIHVzZWQgYXMgbG9uZyBhcyB0aGV5IGlt
cGxlbWVudCByYW5kb20tYWNjZXNzIGl0ZXJhdG9ycyBhbmQgYSBjb250aWd1b3VzCi0gICAgc3Rv
cmFnZS4KLQotICAgIEBwcmUgVGhlIGNvbnRhaW5lciBzdG9yYWdlIGlzIGNvbnRpZ3VvdXMuIFZp
b2xhdGluZyB0aGlzIHByZWNvbmRpdGlvbgotICAgIHlpZWxkcyB1bmRlZmluZWQgYmVoYXZpb3Iu
ICoqVGhpcyBwcmVjb25kaXRpb24gaXMgZW5mb3JjZWQgd2l0aCBhbgotICAgIGFzc2VydGlvbi4q
KgotICAgIEBwcmUgRWFjaCBlbGVtZW50IG9mIHRoZSBjb250YWluZXIgaGFzIGEgc2l6ZSBvZiAx
IGJ5dGUuIFZpb2xhdGluZyB0aGlzCi0gICAgcHJlY29uZGl0aW9uIHlpZWxkcyB1bmRlZmluZWQg
YmVoYXZpb3IuICoqVGhpcyBwcmVjb25kaXRpb24gaXMgZW5mb3JjZWQKLSAgICB3aXRoIGEgc3Rh
dGljIGFzc2VydGlvbi4qKgotCi0gICAgQHdhcm5pbmcgVGhlcmUgaXMgbm8gd2F5IHRvIGVuZm9y
Y2UgYWxsIHByZWNvbmRpdGlvbnMgYXQgY29tcGlsZS10aW1lLiBJZgotICAgICAgICAgICAgIHRo
ZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIG5vbmNvbXBsaWFudCBjb250YWluZXIgYW5kIHdp
dGgKLSAgICAgICAgICAgICBhc3NlcnRpb25zIHN3aXRjaGVkIG9mZiwgdGhlIGJlaGF2aW9yIGlz
IHVuZGVmaW5lZCBhbmQgd2lsbCBtb3N0Ci0gICAgICAgICAgICAgbGlrZWx5IHlpZWxkIHNlZ21l
bnRhdGlvbiB2aW9sYXRpb24uCi0KLSAgICBAdHBhcmFtIENvbnRpZ3VvdXNDb250YWluZXIgY29u
dGFpbmVyIHR5cGUgd2l0aCBjb250aWd1b3VzIHN0b3JhZ2UKLSAgICBAcGFyYW1baW5dIGMgIGNv
bnRhaW5lciB0byByZWFkIGZyb20KLSAgICBAcGFyYW1baW5dIGNiICBhIHBhcnNlciBjYWxsYmFj
ayBmdW5jdGlvbiBvZiB0eXBlIEByZWYgcGFyc2VyX2NhbGxiYWNrX3QKLSAgICB3aGljaCBpcyB1
c2VkIHRvIGNvbnRyb2wgdGhlIGRlc2VyaWFsaXphdGlvbiBieSBmaWx0ZXJpbmcgdW53YW50ZWQg
dmFsdWVzCi0gICAgKG9wdGlvbmFsKQotCi0gICAgQHJldHVybiByZXN1bHQgb2YgdGhlIGRlc2Vy
aWFsaXphdGlvbgotCi0gICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBsZW5ndGggb2YgdGhl
IGlucHV0LiBUaGUgcGFyc2VyIGlzIGEgcHJlZGljdGl2ZQotICAgIExMKDEpIHBhcnNlci4gVGhl
IGNvbXBsZXhpdHkgY2FuIGJlIGhpZ2hlciBpZiB0aGUgcGFyc2VyIGNhbGxiYWNrIGZ1bmN0aW9u
Ci0gICAgQGEgY2IgaGFzIGEgc3VwZXItbGluZWFyIGNvbXBsZXhpdHkuCi0KLSAgICBAbm90ZSBB
IFVURi04IGJ5dGUgb3JkZXIgbWFyayBpcyBzaWxlbnRseSBpZ25vcmVkLgotCi0gICAgQGxpdmVl
eGFtcGxle1RoZSBleGFtcGxlIGJlbG93IGRlbW9uc3RyYXRlcyB0aGUgYHBhcnNlKClgIGZ1bmN0
aW9uIHJlYWRpbmcKLSAgICBmcm9tIGEgY29udGlndW91cyBjb250YWluZXIuLHBhcnNlX19jb250
aWd1b3VzY29udGFpbmVyX19wYXJzZXJfY2FsbGJhY2tfdH0KLQotICAgIEBzaW5jZSB2ZXJzaW9u
IDIuMC4zCi0gICAgKi8KLSAgICB0ZW1wbGF0ZTxjbGFzcyBDb250aWd1b3VzQ29udGFpbmVyLCB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKLSAgICAgICAgICAgICAgICAgbm90IHN0ZDo6aXNfcG9p
bnRlcjxDb250aWd1b3VzQ29udGFpbmVyPjo6dmFsdWUgYW5kCi0gICAgICAgICAgICAgICAgIHN0
ZDo6aXNfYmFzZV9vZjwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6cmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcsCi0gICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9y
X3RyYWl0czxkZWNsdHlwZShzdGQ6OmJlZ2luKHN0ZDo6ZGVjbHZhbDxDb250aWd1b3VzQ29udGFp
bmVyIGNvbnN0PigpKSk+OjppdGVyYXRvcl9jYXRlZ29yeT46OnZhbHVlCi0gICAgICAgICAgICAg
ICAgICwgaW50Pjo6dHlwZSA9IDA+Ci0gICAgc3RhdGljIGJhc2ljX2pzb24gcGFyc2UoY29uc3Qg
Q29udGlndW91c0NvbnRhaW5lciYgYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBwYXJzZXJfY2FsbGJhY2tfdCBjYiA9IG51bGxwdHIpCi0gICAgewotICAgICAgICAvLyBkZWxl
Z2F0ZSB0aGUgY2FsbCB0byB0aGUgaXRlcmF0b3ItcmFuZ2UgcGFyc2Ugb3ZlcmxvYWQKLSAgICAg
ICAgcmV0dXJuIHBhcnNlKHN0ZDo6YmVnaW4oYyksIHN0ZDo6ZW5kKGMpLCBjYik7Ci0gICAgfQot
Ci0gICAgLyohCi0gICAgQGJyaWVmIGRlc2VyaWFsaXplIGZyb20gc3RyZWFtCi0KLSAgICBEZXNl
cmlhbGl6ZXMgYW4gaW5wdXQgc3RyZWFtIHRvIGEgSlNPTiB2YWx1ZS4KLQotICAgIEBwYXJhbVtp
bixvdXRdIGkgIGlucHV0IHN0cmVhbSB0byByZWFkIGEgc2VyaWFsaXplZCBKU09OIHZhbHVlIGZy
b20KLSAgICBAcGFyYW1baW4sb3V0XSBqICBKU09OIHZhbHVlIHRvIHdyaXRlIHRoZSBkZXNlcmlh
bGl6ZWQgaW5wdXQgdG8KLQotICAgIEB0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQgaW4gY2Fz
ZSBvZiBwYXJzZSBlcnJvcnMKLQotICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgbGVuZ3Ro
IG9mIHRoZSBpbnB1dC4gVGhlIHBhcnNlciBpcyBhIHByZWRpY3RpdmUKLSAgICBMTCgxKSBwYXJz
ZXIuCi0KLSAgICBAbm90ZSBBIFVURi04IGJ5dGUgb3JkZXIgbWFyayBpcyBzaWxlbnRseSBpZ25v
cmVkLgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGhvdyBhIEpT
T04gdmFsdWUgaXMgY29uc3RydWN0ZWQgYnkKLSAgICByZWFkaW5nIGEgc2VyaWFsaXphdGlvbiBm
cm9tIGEgc3RyZWFtLixvcGVyYXRvcl9kZXNlcmlhbGl6ZX0KLQotICAgIEBzYSBwYXJzZShzdGQ6
OmlzdHJlYW0mLCBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCkgZm9yIGEgdmFyaWFudCB3aXRoIGEK
LSAgICBwYXJzZXIgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZmlsdGVyIHZhbHVlcyB3aGlsZSBwYXJz
aW5nCi0KLSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAgZnJpZW5kIHN0ZDo6
aXN0cmVhbSYgb3BlcmF0b3I8PChiYXNpY19qc29uJiBqLCBzdGQ6OmlzdHJlYW0mIGkpCi0gICAg
ewotICAgICAgICBqID0gcGFyc2VyKGkpLnBhcnNlKCk7Ci0gICAgICAgIHJldHVybiBpOwotICAg
IH0KLQotICAgIC8qIQotICAgIEBicmllZiBkZXNlcmlhbGl6ZSBmcm9tIHN0cmVhbQotICAgIEBj
b3B5ZG9jIG9wZXJhdG9yPDwoYmFzaWNfanNvbiYsIHN0ZDo6aXN0cmVhbSYpCi0gICAgKi8KLSAg
ICBmcmllbmQgc3RkOjppc3RyZWFtJiBvcGVyYXRvcj4+KHN0ZDo6aXN0cmVhbSYgaSwgYmFzaWNf
anNvbiYgaikKLSAgICB7Ci0gICAgICAgIGogPSBwYXJzZXIoaSkucGFyc2UoKTsKLSAgICAgICAg
cmV0dXJuIGk7Ci0gICAgfQotCi0gICAgLy8vIEB9Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLSAgICAvLyBiaW5hcnkgc2VyaWFsaXphdGlvbi9kZXNl
cmlhbGl6YXRpb24gLy8KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLQotICAgIC8vLyBAbmFtZSBiaW5hcnkgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRp
b24gc3VwcG9ydAotICAgIC8vLyBAewotCi0gIHByaXZhdGU6Ci0gICAgLyohCi0gICAgQG5vdGUg
U29tZSBjb2RlIGluIHRoZSBzd2l0Y2ggY2FzZXMgaGFzIGJlZW4gY29waWVkLCBiZWNhdXNlIG90
aGVyd2lzZQotICAgICAgICAgIGNvcGlsZXJzIHdvdWxkIGNvbXBsYWluIGFib3V0IGltcGxpY2l0
IGZhbGx0aHJvdWdoIGFuZCB0aGVyZSBpcyBubwotICAgICAgICAgIHBvcnRhYmxlIGF0dHJpYnV0
ZSB0byBtdXRlIHN1Y2ggd2FybmluZ3MuCi0gICAgKi8KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotICAgIHN0YXRpYyB2b2lkIGFkZF90b192ZWN0b3Ioc3RkOjp2ZWN0b3I8dWludDhfdD4mIHZl
Yywgc2l6ZV90IGJ5dGVzLCBjb25zdCBUIG51bWJlcikKLSAgICB7Ci0gICAgICAgIGFzc2VydChi
eXRlcyA9PSAxIG9yIGJ5dGVzID09IDIgb3IgYnl0ZXMgPT0gNCBvciBieXRlcyA9PSA4KTsKLQot
ICAgICAgICBzd2l0Y2ggKGJ5dGVzKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIDg6Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjLnB1c2hfYmFjayhzdGF0aWNfY2FzdDx1
aW50OF90Pigoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bWJlcikgPj4gMDcwKSAmIDB4ZmYpKTsK
LSAgICAgICAgICAgICAgICB2ZWMucHVzaF9iYWNrKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KChzdGF0
aWNfY2FzdDx1aW50NjRfdD4obnVtYmVyKSA+PiAwNjApICYgMHhmZikpOwotICAgICAgICAgICAg
ICAgIHZlYy5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8dWludDhfdD4oKHN0YXRpY19jYXN0PHVpbnQ2
NF90PihudW1iZXIpID4+IDA1MCkgJiAweGZmKSk7Ci0gICAgICAgICAgICAgICAgdmVjLnB1c2hf
YmFjayhzdGF0aWNfY2FzdDx1aW50OF90Pigoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG51bWJlcikg
Pj4gMDQwKSAmIDB4ZmYpKTsKLSAgICAgICAgICAgICAgICB2ZWMucHVzaF9iYWNrKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KChudW1iZXIgPj4gMDMwKSAmIDB4ZmYpKTsKLSAgICAgICAgICAgICAgICB2
ZWMucHVzaF9iYWNrKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KChudW1iZXIgPj4gMDIwKSAmIDB4ZmYp
KTsKLSAgICAgICAgICAgICAgICB2ZWMucHVzaF9iYWNrKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KChu
dW1iZXIgPj4gMDEwKSAmIDB4ZmYpKTsKLSAgICAgICAgICAgICAgICB2ZWMucHVzaF9iYWNrKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KG51bWJlciAmIDB4ZmYpKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHZlYy5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8dWludDhfdD4oKG51bWJl
ciA+PiAwMzApICYgMHhmZikpOwotICAgICAgICAgICAgICAgIHZlYy5wdXNoX2JhY2soc3RhdGlj
X2Nhc3Q8dWludDhfdD4oKG51bWJlciA+PiAwMjApICYgMHhmZikpOwotICAgICAgICAgICAgICAg
IHZlYy5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8dWludDhfdD4oKG51bWJlciA+PiAwMTApICYgMHhm
ZikpOwotICAgICAgICAgICAgICAgIHZlYy5wdXNoX2JhY2soc3RhdGljX2Nhc3Q8dWludDhfdD4o
bnVtYmVyICYgMHhmZikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVj
LnB1c2hfYmFjayhzdGF0aWNfY2FzdDx1aW50OF90PigobnVtYmVyID4+IDAxMCkgJiAweGZmKSk7
Ci0gICAgICAgICAgICAgICAgdmVjLnB1c2hfYmFjayhzdGF0aWNfY2FzdDx1aW50OF90PihudW1i
ZXIgJiAweGZmKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWMucHVz
aF9iYWNrKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG51bWJlciAmIDB4ZmYpKTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIQot
ICAgIEBicmllZiB0YWtlIHN1ZmZpY2llbnQgYnl0ZXMgZnJvbSBhIHZlY3RvciB0byBmaWxsIGFu
IGludGVnZXIgdmFyaWFibGUKLQotICAgIEluIHRoZSBjb250ZXh0IG9mIGJpbmFyeSBzZXJpYWxp
emF0aW9uIGZvcm1hdHMsIHdlIG5lZWQgdG8gcmVhZCBzZXZlcmFsCi0gICAgYnl0ZXMgZnJvbSBh
IGJ5dGUgdmVjdG9yIGFuZCBjb21iaW5lIHRoZW0gdG8gbXVsdGktYnl0ZSBpbnRlZ3JhbCBkYXRh
Ci0gICAgdHlwZXMuCi0KLSAgICBAcGFyYW1baW5dIHZlYyAgYnl0ZSB2ZWN0b3IgdG8gcmVhZCBm
cm9tCi0gICAgQHBhcmFtW2luXSBjdXJyZW50X2luZGV4ICB0aGUgcG9zaXRpb24gaW4gdGhlIHZl
Y3RvciBhZnRlciB3aGljaCB0byByZWFkCi0KLSAgICBAcmV0dXJuIHRoZSBuZXh0IHNpemVvZihU
KSBieXRlcyBmcm9tIEBhIHZlYywgaW4gcmV2ZXJzZSBvcmRlciBhcyBUCi0KLSAgICBAdHBhcmFt
IFQgdGhlIGludGVncmFsIHJldHVybiB0eXBlCi0KLSAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFu
Z2UgaWYgdGhlcmUgYXJlIGxlc3MgdGhhbiBzaXplb2YoVCkrMSBieXRlcyBpbiB0aGUKLSAgICAg
ICAgICAgdmVjdG9yIEBhIHZlYyB0byByZWFkCi0KLSAgICBJbiB0aGUgZm9yIGxvb3AsIHRoZSBi
eXRlcyBmcm9tIHRoZSB2ZWN0b3IgYXJlIGNvcGllZCBpbiByZXZlcnNlIG9yZGVyIGludG8KLSAg
ICB0aGUgcmV0dXJuIHZhbHVlLiBJbiB0aGUgZmlndXJlcyBiZWxvdywgbGV0IHNpemVvZihUKT00
IGFuZCBgaWAgYmUgdGhlIGxvb3AKLSAgICB2YXJpYWJsZS4KLQotICAgIFByZWNvbmRpdGlvbjoK
LQotICAgIHZlYzogICB8ICAgfCAgIHwgYSB8IGIgfCBjIHwgZCB8ICAgICAgVDogfCAgIHwgICB8
ICAgfCAgIHwKLSAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgIF4gICAgICAgICAgICAg
XiAgICAgICAgICAgICAgICBeCi0gICAgICAgICAgIGN1cnJlbnRfaW5kZXggICAgICAgICBpICAg
ICAgICAgICAgcHRyICAgICAgICBzaXplb2YoVCkKLQotICAgIFBvc3Rjb25kaXRpb246Ci0KLSAg
ICB2ZWM6ICAgfCAgIHwgICB8IGEgfCBiIHwgYyB8IGQgfCAgICAgIFQ6IHwgZCB8IGMgfCBiIHwg
YSB8Ci0gICAgICAgICAgICAgICAgIF4gICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF4KLSAgICAgICAgICAgICAgICAgfCAgIGkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdHIKLSAgICAgICAgICAgY3VycmVudF9pbmRleAotCi0gICAgQHNhIENvZGUg
YWRhcHRlZCBmcm9tIDxodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MTAzMTg2NS8yNjYzNzg+
LgotICAgICovCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgVCBnZXRfZnJv
bV92ZWN0b3IoY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIHZlYywgY29uc3Qgc2l6ZV90IGN1
cnJlbnRfaW5kZXgpCi0gICAgewotICAgICAgICBpZiAoY3VycmVudF9pbmRleCArIHNpemVvZihU
KSArIDEgPiB2ZWMuc2l6ZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBKU09OX1RIUk9XKHN0
ZDo6b3V0X29mX3JhbmdlKCJjYW5ub3QgcmVhZCAiICsgc3RkOjp0b19zdHJpbmcoc2l6ZW9mKFQp
KSArICIgYnl0ZXMgZnJvbSB2ZWN0b3IiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBUIHJlc3Vs
dDsKLSAgICAgICAgYXV0byogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oJnJlc3Vs
dCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZW9mKFQpOyArK2kpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgICpwdHIrKyA9IHZlY1tjdXJyZW50X2luZGV4ICsgc2l6ZW9mKFQp
IC0gaV07Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICAv
KiEKLSAgICBAYnJpZWYgY3JlYXRlIGEgTWVzc2FnZVBhY2sgc2VyaWFsaXphdGlvbiBvZiBhIGdp
dmVuIEpTT04gdmFsdWUKLQotICAgIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgaW1wbGVtZW50
YXRpb24gb2YgdGhlIE1lc3NhZ2VQYWNrIHNwZWNpZmljYXRpb24uCi0KLSAgICBAcGFyYW1baW5d
IGogIEpTT04gdmFsdWUgdG8gc2VyaWFsaXplCi0gICAgQHBhcmFtW2luLG91dF0gdiAgYnl0ZSB2
ZWN0b3IgdG8gd3JpdGUgdGhlIHNlcmlhbGl6YXRpb24gdG8KLQotICAgIEBzYSBodHRwczovL2dp
dGh1Yi5jb20vbXNncGFjay9tc2dwYWNrL2Jsb2IvbWFzdGVyL3NwZWMubWQKLSAgICAqLwotICAg
IHN0YXRpYyB2b2lkIHRvX21zZ3BhY2tfaW50ZXJuYWwoY29uc3QgYmFzaWNfanNvbiYgaiwgc3Rk
Ojp2ZWN0b3I8dWludDhfdD4mIHYpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGoudHlwZSgpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6Ci0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgLy8gbmlsCi0gICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soMHhj
MCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAv
LyB0cnVlIGFuZCBmYWxzZQotICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKGoubV92YWx1ZS5i
b29sZWFuID8gMHhjMyA6IDB4YzIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9pbnRlZ2VyOgotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPj0g
MCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1lc3NhZ2VQYWNr
IGRvZXMgbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBwb3NpdGl2ZQotICAgICAgICAgICAgICAg
ICAgICAvLyBzaWduZWQgaW50ZWdlcnMgYW5kIHVuc2lnbmVkIGludGVnZXJzLiBUaGVyZWZvcmUs
IHdlCi0gICAgICAgICAgICAgICAgICAgIC8vIHVzZWQgdGhlIGNvZGUgZnJvbSB0aGUgdmFsdWVf
dDo6bnVtYmVyX3Vuc2lnbmVkIGNhc2UKLSAgICAgICAgICAgICAgICAgICAgLy8gaGVyZS4KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGoubV92YWx1ZS5udW1iZXJfdW5zaWduZWQgPCAxMjgpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBvc2l0aXZl
IGZpeG51bQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3RvX3ZlY3Rvcih2LCAxLCBqLm1f
dmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChqLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDw9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dWludDhfdD46Om1heCgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAvLyB1aW50IDgKLSAgICAgICAgICAgICAgICAgICAgICAgIHYu
cHVzaF9iYWNrKDB4Y2MpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3RvX3ZlY3Rvcih2
LCAxLCBqLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChqLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDw9
IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdWludCAxNgotICAgICAgICAgICAgICAg
ICAgICAgICAgdi5wdXNoX2JhY2soMHhjZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRf
dG9fdmVjdG9yKHYsIDIsIGoubV92YWx1ZS5udW1iZXJfdW5zaWduZWQpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGoubV92YWx1ZS5udW1iZXJf
dW5zaWduZWQgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1aW50IDMyCi0gICAg
ICAgICAgICAgICAgICAgICAgICB2LnB1c2hfYmFjaygweGNlKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZF90b192ZWN0b3IodiwgNCwgai5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoai5tX3Zh
bHVlLm51bWJlcl91bnNpZ25lZCA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4
KCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVp
bnQgNjQKLSAgICAgICAgICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKDB4Y2YpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkX3RvX3ZlY3Rvcih2LCA4LCBqLm1fdmFsdWUubnVtYmVyX3Vu
c2lnbmVkKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID49IC0zMikKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmVnYXRpdmUgZml4bnVtCi0gICAgICAgICAg
ICAgICAgICAgICAgICBhZGRfdG9fdmVjdG9yKHYsIDEsIGoubV92YWx1ZS5udW1iZXJfaW50ZWdl
cik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
ai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID49IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50OF90Pjo6
bWluKCkgYW5kIGoubV92YWx1ZS5udW1iZXJfaW50ZWdlciA8PSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludDhfdD46Om1heCgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpbnQgOAotICAgICAgICAgICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soMHhk
MCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRfdG9fdmVjdG9yKHYsIDEsIGoubV92YWx1
ZS5udW1iZXJfaW50ZWdlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID49IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50MTZfdD46Om1pbigpIGFuZCBqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPD0gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQxNl90Pjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludCAxNgotICAgICAgICAgICAgICAgICAgICAg
ICAgdi5wdXNoX2JhY2soMHhkMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRfdG9fdmVj
dG9yKHYsIDIsIGoubV92YWx1ZS5udW1iZXJfaW50ZWdlcik7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2Vy
ID49IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1pbigpIGFuZCBqLm1fdmFsdWUubnVt
YmVyX2ludGVnZXIgPD0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludCAzMgotICAg
ICAgICAgICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soMHhkMik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhZGRfdG9fdmVjdG9yKHYsIDQsIGoubV92YWx1ZS5udW1iZXJfaW50ZWdlcik7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoai5tX3Zh
bHVlLm51bWJlcl9pbnRlZ2VyID49IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigp
IGFuZCBqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIgPD0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2
NF90Pjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGludCA2NAotICAgICAgICAgICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soMHhkMyk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRfdG9fdmVjdG9yKHYsIDgsIGoubV92YWx1ZS5u
dW1iZXJfaW50ZWdlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkOgotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIGlmIChqLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDwgMTI4KQotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgLy8gcG9zaXRpdmUgZml4bnVtCi0gICAgICAgICAgICAg
ICAgICAgIGFkZF90b192ZWN0b3IodiwgMSwgai5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGoubV92YWx1ZS5udW1i
ZXJfdW5zaWduZWQgPD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50OF90Pjo6bWF4KCkpCi0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyB1aW50IDgKLSAgICAgICAgICAg
ICAgICAgICAgdi5wdXNoX2JhY2soMHhjYyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZF90b192
ZWN0b3IodiwgMSwgai5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGoubV92YWx1ZS5udW1iZXJfdW5zaWduZWQgPD0g
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gdWludCAxNgotICAgICAgICAgICAgICAgICAgICB2LnB1
c2hfYmFjaygweGNkKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkX3RvX3ZlY3Rvcih2LCAyLCBq
Lm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZSBpZiAoai5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCA8PSBzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAvLyB1aW50IDMyCi0gICAgICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKDB4Y2Up
OwotICAgICAgICAgICAgICAgICAgICBhZGRfdG9fdmVjdG9yKHYsIDQsIGoubV92YWx1ZS5udW1i
ZXJfdW5zaWduZWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlm
IChqLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDY0
X3Q+OjptYXgoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHVp
bnQgNjQKLSAgICAgICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soMHhjZik7Ci0gICAgICAgICAg
ICAgICAgICAgIGFkZF90b192ZWN0b3IodiwgOCwgai5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bWJlcl9mbG9hdDoKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAvLyBmbG9hdCA2NAotICAgICAgICAgICAgICAgIHYucHVzaF9i
YWNrKDB4Y2IpOwotICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8qIGhlbHBlciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KCYoai5tX3ZhbHVlLm51bWJlcl9mbG9hdCkpOwotICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgODsgKytpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soaGVscGVyWzcgLSBpXSk7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBhdXRvIE4gPSBqLm1fdmFsdWUuc3RyaW5nLT5zaXplKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKE4gPD0gMzEpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAvLyBmaXhzdHIKLSAgICAgICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soc3RhdGlj
X2Nhc3Q8dWludDhfdD4oMHhhMCB8IE4pKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZSBpZiAoTiA8PSAyNTUpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAvLyBzdHIgOAotICAgICAgICAgICAgICAgICAgICB2LnB1c2hfYmFjaygweGQ5KTsK
LSAgICAgICAgICAgICAgICAgICAgYWRkX3RvX3ZlY3Rvcih2LCAxLCBOKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoTiA8PSA2NTUzNSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHN0ciAxNgotICAgICAgICAgICAgICAgICAg
ICB2LnB1c2hfYmFjaygweGRhKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkX3RvX3ZlY3Rvcih2
LCAyLCBOKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoTiA8
PSA0Mjk0OTY3Mjk1KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
c3RyIDMyCi0gICAgICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKDB4ZGIpOwotICAgICAgICAg
ICAgICAgICAgICBhZGRfdG9fdmVjdG9yKHYsIDQsIE4pOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIC8vIGFwcGVuZCBzdHJpbmcKLSAgICAgICAgICAgICAgICBzdGQ6OmNv
cHkoai5tX3ZhbHVlLnN0cmluZy0+YmVnaW4oKSwgai5tX3ZhbHVlLnN0cmluZy0+ZW5kKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6YmFja19pbnNlcnRlcih2KSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgdmFsdWVf
dDo6YXJyYXk6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgYXV0byBOID0g
ai5tX3ZhbHVlLmFycmF5LT5zaXplKCk7Ci0gICAgICAgICAgICAgICAgaWYgKE4gPD0gMTUpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBmaXhhcnJheQotICAgICAg
ICAgICAgICAgICAgICB2LnB1c2hfYmFjayhzdGF0aWNfY2FzdDx1aW50OF90PigweDkwIHwgTikp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChOIDw9IDB4ZmZm
ZikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFycmF5IDE2Ci0g
ICAgICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKDB4ZGMpOwotICAgICAgICAgICAgICAgICAg
ICBhZGRfdG9fdmVjdG9yKHYsIDIsIE4pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChOIDw9IDB4ZmZmZmZmZmYpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAvLyBhcnJheSAzMgotICAgICAgICAgICAgICAgICAgICB2LnB1c2hfYmFj
aygweGRkKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkX3RvX3ZlY3Rvcih2LCA0LCBOKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBhcHBlbmQgZWFjaCBlbGVtZW50
Ci0gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlbCA6ICpqLm1fdmFsdWUuYXJyYXkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB0b19tc2dwYWNrX2ludGVy
bmFsKGVsLCB2KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gTiA9IGoubV92YWx1ZS5vYmplY3Qt
PnNpemUoKTsKLSAgICAgICAgICAgICAgICBpZiAoTiA8PSAxNSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIGZpeG1hcAotICAgICAgICAgICAgICAgICAgICB2LnB1
c2hfYmFjayhzdGF0aWNfY2FzdDx1aW50OF90PigweDgwIHwgKE4gJiAweGYpKSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKE4gPD0gNjU1MzUpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBtYXAgMTYKLSAgICAgICAgICAgICAg
ICAgICAgdi5wdXNoX2JhY2soMHhkZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZF90b192ZWN0
b3IodiwgMiwgTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYg
KE4gPD0gNDI5NDk2NzI5NSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIG1hcCAzMgotICAgICAgICAgICAgICAgICAgICB2LnB1c2hfYmFjaygweGRmKTsKLSAgICAg
ICAgICAgICAgICAgICAgYWRkX3RvX3ZlY3Rvcih2LCA0LCBOKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAvLyBhcHBlbmQgZWFjaCBlbGVtZW50Ci0gICAgICAgICAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBlbCA6ICpqLm1fdmFsdWUub2JqZWN0KQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdG9fbXNncGFja19pbnRlcm5hbChlbC5maXJzdCwg
dik7Ci0gICAgICAgICAgICAgICAgICAgIHRvX21zZ3BhY2tfaW50ZXJuYWwoZWwuc2Vjb25kLCB2
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiEKLSAg
ICBAYnJpZWYgY3JlYXRlIGEgQ0JPUiBzZXJpYWxpemF0aW9uIG9mIGEgZ2l2ZW4gSlNPTiB2YWx1
ZQotCi0gICAgVGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUg
Q0JPUiBzcGVjaWZpY2F0aW9uLgotCi0gICAgQHBhcmFtW2luXSBqICBKU09OIHZhbHVlIHRvIHNl
cmlhbGl6ZQotICAgIEBwYXJhbVtpbixvdXRdIHYgIGJ5dGUgdmVjdG9yIHRvIHdyaXRlIHRoZSBz
ZXJpYWxpemF0aW9uIHRvCi0KLSAgICBAc2EgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3Jm
YzcwNDkKLSAgICAqLwotICAgIHN0YXRpYyB2b2lkIHRvX2Nib3JfaW50ZXJuYWwoY29uc3QgYmFz
aWNfanNvbiYgaiwgc3RkOjp2ZWN0b3I8dWludDhfdD4mIHYpCi0gICAgewotICAgICAgICBzd2l0
Y2ggKGoudHlwZSgpKQotICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soMHhmNik7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgdmFs
dWVfdDo6Ym9vbGVhbjoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2LnB1c2hfYmFj
ayhqLm1fdmFsdWUuYm9vbGVhbiA/IDB4ZjUgOiAweGY0KTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJfaW50
ZWdlcjoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoai5tX3ZhbHVlLm51bWJl
cl9pbnRlZ2VyID49IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAv
LyBDQk9SIGRvZXMgbm90IGRpZmZlcmVudGlhdGUgYmV0d2VlbiBwb3NpdGl2ZSBzaWduZWQKLSAg
ICAgICAgICAgICAgICAgICAgLy8gaW50ZWdlcnMgYW5kIHVuc2lnbmVkIGludGVnZXJzLiBUaGVy
ZWZvcmUsIHdlIHVzZWQgdGhlCi0gICAgICAgICAgICAgICAgICAgIC8vIGNvZGUgZnJvbSB0aGUg
dmFsdWVfdDo6bnVtYmVyX3Vuc2lnbmVkIGNhc2UgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGoubV92YWx1ZS5udW1iZXJfaW50ZWdlciA8PSAweDE3KQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRfdG9fdmVjdG9yKHYsIDEsIGoubV92YWx1
ZS5udW1iZXJfaW50ZWdlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyIDw9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDhfdD46Om1heCgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB2LnB1c2hfYmFjaygweDE4KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG9uZS1ieXRlIHVpbnQ4X3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZF90b192ZWN0
b3IodiwgMSwgai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyKTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChqLm1fdmFsdWUubnVtYmVyX2ludGVnZXIg
PD0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2LnB1c2hfYmFjaygweDE5KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHR3by1ieXRlIHVpbnQxNl90Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhZGRfdG9fdmVjdG9yKHYsIDIsIGoubV92YWx1ZS5udW1iZXJfaW50ZWdlcik7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoai5tX3Zh
bHVlLm51bWJlcl9pbnRlZ2VyIDw9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgo
KSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdi5wdXNo
X2JhY2soMHgxYSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VyLWJ5dGUgdWludDMy
X3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZF90b192ZWN0b3IodiwgNCwgai5tX3ZhbHVl
Lm51bWJlcl9pbnRlZ2VyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHYucHVzaF9iYWNrKDB4MWIpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWlnaHQtYnl0
ZSB1aW50NjRfdAotICAgICAgICAgICAgICAgICAgICAgICAgYWRkX3RvX3ZlY3Rvcih2LCA4LCBq
Lm1fdmFsdWUubnVtYmVyX2ludGVnZXIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFRoZSBjb252ZXJzaW9ucyBiZWxvdyBlbmNvZGUgdGhlIHNpZ24g
aW4gdGhlIGZpcnN0Ci0gICAgICAgICAgICAgICAgICAgIC8vIGJ5dGUsIGFuZCB0aGUgdmFsdWUg
aXMgY29udmVydGVkIHRvIGEgcG9zaXRpdmUgbnVtYmVyLgotICAgICAgICAgICAgICAgICAgICBj
b25zdCBhdXRvIHBvc2l0aXZlX251bWJlciA9IC0xIC0gai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2Vy
OwotICAgICAgICAgICAgICAgICAgICBpZiAoai5tX3ZhbHVlLm51bWJlcl9pbnRlZ2VyID49IC0y
NCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdi5wdXNo
X2JhY2soc3RhdGljX2Nhc3Q8dWludDhfdD4oMHgyMCArIHBvc2l0aXZlX251bWJlcikpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBvc2l0aXZl
X251bWJlciA8PSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ4X3Q+OjptYXgoKSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW50IDgKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKDB4MzgpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkX3RvX3ZlY3Rvcih2LCAxLCBwb3NpdGl2ZV9udW1iZXIpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBvc2l0aXZlX251bWJlciA8PSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCkpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGludCAxNgotICAgICAgICAgICAgICAgICAg
ICAgICAgdi5wdXNoX2JhY2soMHgzOSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRfdG9f
dmVjdG9yKHYsIDIsIHBvc2l0aXZlX251bWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocG9zaXRpdmVfbnVtYmVyIDw9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaW50IDMyCi0gICAgICAgICAgICAgICAgICAgICAgICB2LnB1
c2hfYmFjaygweDNhKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZF90b192ZWN0b3Iodiwg
NCwgcG9zaXRpdmVfbnVtYmVyKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGludCA2NAotICAgICAgICAgICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soMHgzYik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRfdG9fdmVjdG9yKHYsIDgsIHBvc2l0aXZlX251
bWJlcik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgdmFsdWVf
dDo6bnVtYmVyX3Vuc2lnbmVkOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChq
Lm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkIDw9IDB4MTcpCi0gICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICB2LnB1c2hfYmFjayhzdGF0aWNfY2FzdDx1aW50OF90PihqLm1fdmFs
dWUubnVtYmVyX3Vuc2lnbmVkKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGoubV92YWx1ZS5udW1iZXJfdW5zaWduZWQgPD0gMHhmZikKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKDB4MTgpOwotICAgICAgICAg
ICAgICAgICAgICAvLyBvbmUtYnl0ZSB1aW50OF90Ci0gICAgICAgICAgICAgICAgICAgIGFkZF90
b192ZWN0b3IodiwgMSwgai5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGoubV92YWx1ZS5udW1iZXJfdW5zaWduZWQg
PD0gMHhmZmZmKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdi5wdXNo
X2JhY2soMHgxOSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHR3by1ieXRlIHVpbnQxNl90Ci0g
ICAgICAgICAgICAgICAgICAgIGFkZF90b192ZWN0b3IodiwgMiwgai5tX3ZhbHVlLm51bWJlcl91
bnNpZ25lZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGou
bV92YWx1ZS5udW1iZXJfdW5zaWduZWQgPD0gMHhmZmZmZmZmZikKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKDB4MWEpOwotICAgICAgICAgICAgICAg
ICAgICAvLyBmb3VyLWJ5dGUgdWludDMyX3QKLSAgICAgICAgICAgICAgICAgICAgYWRkX3RvX3Zl
Y3Rvcih2LCA0LCBqLm1fdmFsdWUubnVtYmVyX3Vuc2lnbmVkKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoai5tX3ZhbHVlLm51bWJlcl91bnNpZ25lZCA8PSAw
eGZmZmZmZmZmZmZmZmZmZmYpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICB2LnB1c2hfYmFjaygweDFiKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gZWlnaHQtYnl0ZSB1
aW50NjRfdAotICAgICAgICAgICAgICAgICAgICBhZGRfdG9fdmVjdG9yKHYsIDgsIGoubV92YWx1
ZS5udW1iZXJfdW5zaWduZWQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpudW1iZXJf
ZmxvYXQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gRG91YmxlLVByZWNpc2lv
biBGbG9hdAotICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKDB4ZmIpOwotICAgICAgICAgICAg
ICAgIGNvbnN0IGF1dG8qIGhlbHBlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KCYoai5tX3ZhbHVlLm51bWJlcl9mbG9hdCkpOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgODsgKytpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgdi5wdXNoX2JhY2soaGVscGVyWzcgLSBpXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIHZhbHVl
X3Q6OnN0cmluZzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvIE4g
PSBqLm1fdmFsdWUuc3RyaW5nLT5zaXplKCk7Ci0gICAgICAgICAgICAgICAgaWYgKE4gPD0gMHgx
NykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKDB4
NjAgKyBzdGF0aWNfY2FzdDx1aW50OF90PihOKSk7ICAvLyAxIGJ5dGUgZm9yIHN0cmluZyArIHNp
emUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoTiA8PSAweGZm
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soMHg3
OCk7ICAvLyBvbmUtYnl0ZSB1aW50OF90IGZvciBOCi0gICAgICAgICAgICAgICAgICAgIGFkZF90
b192ZWN0b3IodiwgMSwgTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKE4gPD0gMHhmZmZmKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgdi5wdXNoX2JhY2soMHg3OSk7ICAvLyB0d28tYnl0ZSB1aW50MTZfdCBmb3IgTgotICAgICAg
ICAgICAgICAgICAgICBhZGRfdG9fdmVjdG9yKHYsIDIsIE4pOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBlbHNlIGlmIChOIDw9IDB4ZmZmZmZmZmYpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICB2LnB1c2hfYmFjaygweDdhKTsgLy8gZm91ci1ieXRl
IHVpbnQzMl90IGZvciBOCi0gICAgICAgICAgICAgICAgICAgIGFkZF90b192ZWN0b3IodiwgNCwg
Tik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIExDT1ZfRVhDTF9TVEFS
VAotICAgICAgICAgICAgICAgIGVsc2UgaWYgKE4gPD0gMHhmZmZmZmZmZmZmZmZmZmZmKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soMHg3Yik7ICAv
LyBlaWdodC1ieXRlIHVpbnQ2NF90IGZvciBOCi0gICAgICAgICAgICAgICAgICAgIGFkZF90b192
ZWN0b3IodiwgOCwgTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIExD
T1ZfRVhDTF9TVE9QCi0KLSAgICAgICAgICAgICAgICAvLyBhcHBlbmQgc3RyaW5nCi0gICAgICAg
ICAgICAgICAgc3RkOjpjb3B5KGoubV92YWx1ZS5zdHJpbmctPmJlZ2luKCksIGoubV92YWx1ZS5z
dHJpbmctPmVuZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmJhY2tfaW5zZXJ0
ZXIodikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGNvbnN0IGF1dG8gTiA9IGoubV92YWx1ZS5hcnJheS0+c2l6ZSgpOwotICAgICAgICAgICAgICAg
IGlmIChOIDw9IDB4MTcpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2
LnB1c2hfYmFjaygweDgwICsgc3RhdGljX2Nhc3Q8dWludDhfdD4oTikpOyAgLy8gMSBieXRlIGZv
ciBhcnJheSArIHNpemUKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBp
ZiAoTiA8PSAweGZmKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdi5w
dXNoX2JhY2soMHg5OCk7ICAvLyBvbmUtYnl0ZSB1aW50OF90IGZvciBOCi0gICAgICAgICAgICAg
ICAgICAgIGFkZF90b192ZWN0b3IodiwgMSwgTik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKE4gPD0gMHhmZmZmKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soMHg5OSk7ICAvLyB0d28tYnl0ZSB1aW50MTZfdCBm
b3IgTgotICAgICAgICAgICAgICAgICAgICBhZGRfdG9fdmVjdG9yKHYsIDIsIE4pOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChOIDw9IDB4ZmZmZmZmZmYpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB2LnB1c2hfYmFjaygweDlhKTsg
IC8vIGZvdXItYnl0ZSB1aW50MzJfdCBmb3IgTgotICAgICAgICAgICAgICAgICAgICBhZGRfdG9f
dmVjdG9yKHYsIDQsIE4pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBM
Q09WX0VYQ0xfU1RBUlQKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChOIDw9IDB4ZmZmZmZmZmZm
ZmZmZmZmZikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHYucHVzaF9i
YWNrKDB4OWIpOyAgLy8gZWlnaHQtYnl0ZSB1aW50NjRfdCBmb3IgTgotICAgICAgICAgICAgICAg
ICAgICBhZGRfdG9fdmVjdG9yKHYsIDgsIE4pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAvLyBMQ09WX0VYQ0xfU1RPUAotCi0gICAgICAgICAgICAgICAgLy8gYXBwZW5kIGVh
Y2ggZWxlbWVudAotICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgZWwgOiAqai5tX3Zh
bHVlLmFycmF5KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdG9fY2Jv
cl9pbnRlcm5hbChlbCwgdik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvIE4gPSBqLm1fdmFsdWUu
b2JqZWN0LT5zaXplKCk7Ci0gICAgICAgICAgICAgICAgaWYgKE4gPD0gMHgxNykKLSAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKDB4YTAgKyBzdGF0aWNf
Y2FzdDx1aW50OF90PihOKSk7ICAvLyAxIGJ5dGUgZm9yIG9iamVjdCArIHNpemUKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoTiA8PSAweGZmKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdi5wdXNoX2JhY2soMHhiOCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGFkZF90b192ZWN0b3IodiwgMSwgTik7ICAvLyBvbmUtYnl0ZSB1aW50OF90
IGZvciBOCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKE4gPD0g
MHhmZmZmKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdi5wdXNoX2Jh
Y2soMHhiOSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZF90b192ZWN0b3IodiwgMiwgTik7ICAv
LyB0d28tYnl0ZSB1aW50MTZfdCBmb3IgTgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBlbHNlIGlmIChOIDw9IDB4ZmZmZmZmZmYpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICB2LnB1c2hfYmFjaygweGJhKTsKLSAgICAgICAgICAgICAgICAgICAgYWRk
X3RvX3ZlY3Rvcih2LCA0LCBOKTsgIC8vIGZvdXItYnl0ZSB1aW50MzJfdCBmb3IgTgotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBMQ09WX0VYQ0xfU1RBUlQKLSAgICAgICAg
ICAgICAgICBlbHNlIGlmIChOIDw9IDB4ZmZmZmZmZmZmZmZmZmZmZikKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIHYucHVzaF9iYWNrKDB4YmIpOwotICAgICAgICAgICAg
ICAgICAgICBhZGRfdG9fdmVjdG9yKHYsIDgsIE4pOyAgLy8gZWlnaHQtYnl0ZSB1aW50NjRfdCBm
b3IgTgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBMQ09WX0VYQ0xfU1RP
UAotCi0gICAgICAgICAgICAgICAgLy8gYXBwZW5kIGVhY2ggZWxlbWVudAotICAgICAgICAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgZWwgOiAqai5tX3ZhbHVlLm9iamVjdCkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHRvX2Nib3JfaW50ZXJuYWwoZWwuZmlyc3QsIHYp
OwotICAgICAgICAgICAgICAgICAgICB0b19jYm9yX2ludGVybmFsKGVsLnNlY29uZCwgdik7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICAvKgotICAgIEBi
cmllZiBjaGVja3MgaWYgZ2l2ZW4gbGVuZ3RocyBkbyBub3QgZXhjZWVkIHRoZSBzaXplIG9mIGEg
Z2l2ZW4gdmVjdG9yCi0KLSAgICBUbyBzZWN1cmUgdGhlIGFjY2VzcyB0byB0aGUgYnl0ZSB2ZWN0
b3IgZHVyaW5nIENCT1IvTWVzc2FnZVBhY2sKLSAgICBkZXNlcmlhbGl6YXRpb24sIGJ5dGVzIGFy
ZSBjb3BpZWQgZnJvbSB0aGUgdmVjdG9yIGludG8gYnVmZmVycy4gVGhpcwotICAgIGZ1bmN0aW9u
IGNoZWNrcyBpZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgKEBhIGxlbikgZG9lcyBub3Qg
ZXhjZWVkCi0gICAgdGhlIHNpemUgQHMgc2l6ZSBvZiB0aGUgdmVjdG9yLiBBZGRpdGlvbmFsbHks
IGFuIEBhIG9mZnNldCBpcyBnaXZlbiBmcm9tCi0gICAgd2hlcmUgdG8gc3RhcnQgcmVhZGluZyB0
aGUgYnl0ZXMuCi0KLSAgICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHJlYWRpbmcgdGhl
IGJ5dGVzIGlzIHNhZmU7IHRoYXQgaXMsIG9mZnNldCBpcwotICAgIGEgdmFsaWQgaW5kZXggaW4g
dGhlIHZlY3Rvciwgb2Zmc2V0K2xlbgotCi0gICAgQHBhcmFtW2luXSBzaXplICAgIHNpemUgb2Yg
dGhlIGJ5dGUgdmVjdG9yCi0gICAgQHBhcmFtW2luXSBsZW4gICAgIG51bWJlciBvZiBieXRlcyB0
byByZWFkCi0gICAgQHBhcmFtW2luXSBvZmZzZXQgIG9mZnNldCB3aGVyZSB0byBzdGFydCByZWFk
aW5nCi0KLSAgICB2ZWM6ICB4IHggeCB4IHggWCBYIFggWCBYCi0gICAgICAgICAgXiAgICAgICAg
IF4gICAgICAgICBeCi0gICAgICAgICAgMCAgICAgICAgIG9mZnNldCAgICBsZW4KLQotICAgIEB0
aHJvd3Mgb3V0X29mX3JhbmdlIGlmIGBsZW4gPiB2LnNpemUoKWAKLSAgICAqLwotICAgIHN0YXRp
YyB2b2lkIGNoZWNrX2xlbmd0aChjb25zdCBzaXplX3Qgc2l6ZSwgY29uc3Qgc2l6ZV90IGxlbiwg
Y29uc3Qgc2l6ZV90IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIC8vIHNpbXBsZSBjYXNlOiByZXF1
ZXN0ZWQgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmVjdG9yJ3MgbGVuZ3RoCi0gICAgICAg
IGlmIChsZW4gPiBzaXplIG9yIG9mZnNldCA+IHNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEpTT05fVEhST1coc3RkOjpvdXRfb2ZfcmFuZ2UoImxlbiBvdXQgb2YgcmFuZ2UiKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBzZWNvbmQgY2FzZTogYWRkaW5nIG9mZnNldCB3b3VsZCByZXN1
bHQgaW4gb3ZlcmZsb3cKLSAgICAgICAgaWYgKChzaXplID4gKHN0ZDo6bnVtZXJpY19saW1pdHM8
c2l6ZV90Pjo6bWF4KCkgLSBvZmZzZXQpKSkKLSAgICAgICAgewotICAgICAgICAgICAgSlNPTl9U
SFJPVyhzdGQ6Om91dF9vZl9yYW5nZSgibGVuK29mZnNldCBvdXQgb2YgcmFuZ2UiKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBsYXN0IGNhc2U6IHJlYWRpbmcgcGFzdCB0aGUgZW5kIG9mIHRo
ZSB2ZWN0b3IKLSAgICAgICAgaWYgKGxlbiArIG9mZnNldCA+IHNpemUpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEpTT05fVEhST1coc3RkOjpvdXRfb2ZfcmFuZ2UoImxlbitvZmZzZXQgb3V0IG9m
IHJhbmdlIikpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIGNyZWF0
ZSBhIEpTT04gdmFsdWUgZnJvbSBhIGdpdmVuIE1lc3NhZ2VQYWNrIHZlY3RvcgotCi0gICAgQHBh
cmFtW2luXSB2ICBNZXNzYWdlUGFjayBzZXJpYWxpemF0aW9uCi0gICAgQHBhcmFtW2luXSBpZHgg
IGJ5dGUgaW5kZXggdG8gc3RhcnQgcmVhZGluZyBmcm9tIEBhIHYKLQotICAgIEByZXR1cm4gZGVz
ZXJpYWxpemVkIEpTT04gdmFsdWUKLQotICAgIEB0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQg
aWYgdW5zdXBwb3J0ZWQgZmVhdHVyZXMgZnJvbSBNZXNzYWdlUGFjayB3ZXJlCi0gICAgdXNlZCBp
biB0aGUgZ2l2ZW4gdmVjdG9yIEBhIHYgb3IgaWYgdGhlIGlucHV0IGlzIG5vdCB2YWxpZCBNZXNz
YWdlUGFjawotICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSBpZiB0aGUgZ2l2ZW4gdmVjdG9y
IGVuZHMgcHJlbWF0dXJlbHkKLQotICAgIEBzYSBodHRwczovL2dpdGh1Yi5jb20vbXNncGFjay9t
c2dwYWNrL2Jsb2IvbWFzdGVyL3NwZWMubWQKLSAgICAqLwotICAgIHN0YXRpYyBiYXNpY19qc29u
IGZyb21fbXNncGFja19pbnRlcm5hbChjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgdiwgc2l6
ZV90JiBpZHgpCi0gICAgewotICAgICAgICAvLyBtYWtlIHN1cmUgcmVhZGluZyAxIGJ5dGUgaXMg
c2FmZQotICAgICAgICBjaGVja19sZW5ndGgodi5zaXplKCksIDEsIGlkeCk7Ci0KLSAgICAgICAg
Ly8gc3RvcmUgYW5kIGluY3JlbWVudCBpbmRleAotICAgICAgICBjb25zdCBzaXplX3QgY3VycmVu
dF9pZHggPSBpZHgrKzsKLQotICAgICAgICBpZiAodltjdXJyZW50X2lkeF0gPD0gMHhiZikKLSAg
ICAgICAgewotICAgICAgICAgICAgaWYgKHZbY3VycmVudF9pZHhdIDw9IDB4N2YpIC8vIHBvc2l0
aXZlIGZpeGludAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiB2W2N1cnJl
bnRfaWR4XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh2W2N1cnJlbnRfaWR4XSA8
PSAweDhmKSAvLyBmaXhtYXAKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBiYXNpY19q
c29uIHJlc3VsdCA9IHZhbHVlX3Q6Om9iamVjdDsKLSAgICAgICAgICAgICAgICBjb25zdCBzaXpl
X3QgbGVuID0gdltjdXJyZW50X2lkeF0gJiAweDBmOwotICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBzdGQ6OnN0cmluZyBrZXkgPSBmcm9tX21zZ3BhY2tfaW50ZXJuYWwodiwgaWR4KTsK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBmcm9tX21zZ3BhY2tfaW50ZXJuYWwo
diwgaWR4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHZbY3VycmVudF9pZHhdIDw9
IDB4OWYpIC8vIGZpeGFycmF5Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYmFzaWNf
anNvbiByZXN1bHQgPSB2YWx1ZV90OjphcnJheTsKLSAgICAgICAgICAgICAgICBjb25zdCBzaXpl
X3QgbGVuID0gdltjdXJyZW50X2lkeF0gJiAweDBmOwotICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQucHVzaF9iYWNrKGZyb21fbXNncGFja19pbnRlcm5hbCh2LCBpZHgpKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgLy8gZml4c3RyCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGxlbiA9IHZbY3VycmVudF9pZHhdICYgMHgxZjsKLSAg
ICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zmc2V0ID0gY3VycmVudF9pZHggKyAxOwotICAg
ICAgICAgICAgICAgIGlkeCArPSBsZW47IC8vIHNraXAgY29udGVudCBieXRlcwotICAgICAgICAg
ICAgICAgIGNoZWNrX2xlbmd0aCh2LnNpemUoKSwgbGVuLCBvZmZzZXQpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2LmRh
dGEoKSkgKyBvZmZzZXQsIGxlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
ZWxzZSBpZiAodltjdXJyZW50X2lkeF0gPj0gMHhlMCkgLy8gbmVnYXRpdmUgZml4aW50Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ4X3Q+KHZbY3VycmVudF9p
ZHhdKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHN3
aXRjaCAodltjdXJyZW50X2lkeF0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSAweGMwOiAvLyBuaWwKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiB2YWx1ZV90OjpudWxsOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGNhc2UgMHhjMjogLy8gZmFsc2UKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBj
YXNlIDB4YzM6IC8vIHRydWUKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNhc2Ug
MHhjYTogLy8gZmxvYXQgMzIKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIGNvcHkgYnl0ZXMgaW4gcmV2ZXJzZSBvcmRlciBpbnRvIHRoZSBkb3VibGUgdmFyaWFibGUK
LSAgICAgICAgICAgICAgICAgICAgZmxvYXQgcmVzOwotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBieXRlID0gMDsgYnl0ZSA8IHNpemVvZihmbG9hdCk7ICsrYnl0ZSkKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oJnJlcylbc2l6ZW9mKGZsb2F0KSAtIGJ5dGUgLSAxXSA9IHYuYXQoY3VycmVudF9p
ZHggKyAxICsgYnl0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgaWR4ICs9IHNpemVvZihmbG9hdCk7IC8vIHNraXAgY29udGVudCBieXRlcwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGNhc2UgMHhjYjogLy8gZmxvYXQgNjQKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIGNvcHkgYnl0ZXMgaW4gcmV2ZXJzZSBvcmRlciBpbnRvIHRoZSBkb3VibGUg
dmFyaWFibGUKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIHJlczsKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgYnl0ZSA9IDA7IGJ5dGUgPCBzaXplb2YoZG91YmxlKTsgKytieXRl
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPigmcmVzKVtzaXplb2YoZG91YmxlKSAtIGJ5dGUgLSAxXSA9IHYu
YXQoY3VycmVudF9pZHggKyAxICsgYnl0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgaWR4ICs9IHNpemVvZihkb3VibGUpOyAvLyBza2lwIGNvbnRlbnQgYnl0
ZXMKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBjYXNlIDB4Y2M6IC8vIHVpbnQgOAotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgaWR4ICs9IDE7IC8vIHNraXAgY29udGVudCBieXRlCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnZXRfZnJvbV92ZWN0b3I8dWludDhfdD4odiwgY3VycmVu
dF9pZHgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNhc2UgMHhjZDog
Ly8gdWludCAxNgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWR4ICs9
IDI7IC8vIHNraXAgMiBjb250ZW50IGJ5dGVzCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
ZXRfZnJvbV92ZWN0b3I8dWludDE2X3Q+KHYsIGN1cnJlbnRfaWR4KTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDB4Y2U6IC8vIHVpbnQgMzIKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlkeCArPSA0OyAvLyBza2lwIDQgY29udGVudCBi
eXRlcwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X2Zyb21fdmVjdG9yPHVpbnQzMl90
Pih2LCBjdXJyZW50X2lkeCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Y2FzZSAweGNmOiAvLyB1aW50IDY0Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBpZHggKz0gODsgLy8gc2tpcCA4IGNvbnRlbnQgYnl0ZXMKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdldF9mcm9tX3ZlY3Rvcjx1aW50NjRfdD4odiwgY3VycmVudF9pZHgpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNhc2UgMHhkMDogLy8gaW50IDgKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlkeCArPSAxOyAvLyBza2lwIGNv
bnRlbnQgYnl0ZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X2Zyb21fdmVjdG9yPGlu
dDhfdD4odiwgY3VycmVudF9pZHgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGNhc2UgMHhkMTogLy8gaW50IDE2Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBpZHggKz0gMjsgLy8gc2tpcCAyIGNvbnRlbnQgYnl0ZXMKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdldF9mcm9tX3ZlY3RvcjxpbnQxNl90Pih2LCBjdXJyZW50X2lkeCk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FzZSAweGQyOiAvLyBpbnQgMzIK
LSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlkeCArPSA0OyAvLyBza2lw
IDQgY29udGVudCBieXRlcwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X2Zyb21fdmVj
dG9yPGludDMyX3Q+KHYsIGN1cnJlbnRfaWR4KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBjYXNlIDB4ZDM6IC8vIGludCA2NAotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWR4ICs9IDg7IC8vIHNraXAgOCBjb250ZW50IGJ5dGVzCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnZXRfZnJvbV92ZWN0b3I8aW50NjRfdD4odiwgY3VycmVudF9p
ZHgpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNhc2UgMHhkOTogLy8g
c3RyIDgKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8g
bGVuID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihnZXRfZnJvbV92ZWN0b3I8dWludDhfdD4odiwgY3Vy
cmVudF9pZHgpKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9mZnNldCA9IGN1
cnJlbnRfaWR4ICsgMjsKLSAgICAgICAgICAgICAgICAgICAgaWR4ICs9IGxlbiArIDE7IC8vIHNr
aXAgc2l6ZSBieXRlICsgY29udGVudCBieXRlcwotICAgICAgICAgICAgICAgICAgICBjaGVja19s
ZW5ndGgodi5zaXplKCksIGxlbiwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHYuZGF0YSgpKSArIG9m
ZnNldCwgbGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDB4
ZGE6IC8vIHN0ciAxNgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
c3QgYXV0byBsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGdldF9mcm9tX3ZlY3Rvcjx1aW50MTZf
dD4odiwgY3VycmVudF9pZHgpKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG9m
ZnNldCA9IGN1cnJlbnRfaWR4ICsgMzsKLSAgICAgICAgICAgICAgICAgICAgaWR4ICs9IGxlbiAr
IDI7IC8vIHNraXAgMiBzaXplIGJ5dGVzICsgY29udGVudCBieXRlcwotICAgICAgICAgICAgICAg
ICAgICBjaGVja19sZW5ndGgodi5zaXplKCksIGxlbiwgb2Zmc2V0KTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHYu
ZGF0YSgpKSArIG9mZnNldCwgbGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBjYXNlIDB4ZGI6IC8vIHN0ciAzMgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3QgYXV0byBsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGdldF9mcm9tX3Zl
Y3Rvcjx1aW50MzJfdD4odiwgY3VycmVudF9pZHgpKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc2l6ZV90IG9mZnNldCA9IGN1cnJlbnRfaWR4ICsgNTsKLSAgICAgICAgICAgICAgICAgICAg
aWR4ICs9IGxlbiArIDQ7IC8vIHNraXAgNCBzaXplIGJ5dGVzICsgY29udGVudCBieXRlcwotICAg
ICAgICAgICAgICAgICAgICBjaGVja19sZW5ndGgodi5zaXplKCksIGxlbiwgb2Zmc2V0KTsKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KHYuZGF0YSgpKSArIG9mZnNldCwgbGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBjYXNlIDB4ZGM6IC8vIGFycmF5IDE2Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBiYXNpY19qc29uIHJlc3VsdCA9IHZhbHVlX3Q6OmFycmF5
OwotICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGxlbiA9IHN0YXRpY19jYXN0PHNpemVf
dD4oZ2V0X2Zyb21fdmVjdG9yPHVpbnQxNl90Pih2LCBjdXJyZW50X2lkeCkpOwotICAgICAgICAg
ICAgICAgICAgICBpZHggKz0gMjsgLy8gc2tpcCAyIHNpemUgYnl0ZXMKLSAgICAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW47ICsraSkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhmcm9tX21zZ3Bh
Y2tfaW50ZXJuYWwodiwgaWR4KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBjYXNlIDB4ZGQ6IC8vIGFycmF5IDMyCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBiYXNpY19qc29uIHJlc3VsdCA9IHZhbHVlX3Q6OmFycmF5OwotICAgICAgICAg
ICAgICAgICAgICBjb25zdCBhdXRvIGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oZ2V0X2Zyb21f
dmVjdG9yPHVpbnQzMl90Pih2LCBjdXJyZW50X2lkeCkpOwotICAgICAgICAgICAgICAgICAgICBp
ZHggKz0gNDsgLy8gc2tpcCA0IHNpemUgYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW47ICsraSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhmcm9tX21zZ3BhY2tfaW50ZXJuYWwo
diwgaWR4KSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDB4
ZGU6IC8vIG1hcCAxNgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYmFz
aWNfanNvbiByZXN1bHQgPSB2YWx1ZV90OjpvYmplY3Q7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnN0IGF1dG8gbGVuID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihnZXRfZnJvbV92ZWN0b3I8dWludDE2
X3Q+KHYsIGN1cnJlbnRfaWR4KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlkeCArPSAyOyAvLyBz
a2lwIDIgc2l6ZSBieXRlcwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbjsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnN0cmluZyBrZXkgPSBmcm9tX21zZ3BhY2tfaW50ZXJuYWwodiwgaWR4KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gZnJvbV9tc2dwYWNrX2ludGVybmFs
KHYsIGlkeCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXNlIDB4
ZGY6IC8vIG1hcCAzMgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgYmFz
aWNfanNvbiByZXN1bHQgPSB2YWx1ZV90OjpvYmplY3Q7Ci0gICAgICAgICAgICAgICAgICAgIGNv
bnN0IGF1dG8gbGVuID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihnZXRfZnJvbV92ZWN0b3I8dWludDMy
X3Q+KHYsIGN1cnJlbnRfaWR4KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlkeCArPSA0OyAvLyBz
a2lwIDQgc2l6ZSBieXRlcwotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGxlbjsgKytpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdGQ6OnN0cmluZyBrZXkgPSBmcm9tX21zZ3BhY2tfaW50ZXJuYWwodiwgaWR4KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gZnJvbV9tc2dwYWNrX2ludGVybmFs
KHYsIGlkeCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6
OmludmFsaWRfYXJndW1lbnQoImVycm9yIHBhcnNpbmcgYSBtc2dwYWNrIEAgIiArIHN0ZDo6dG9f
c3RyaW5nKGN1cnJlbnRfaWR4KSArICI6ICIgKyBzdGQ6OnRvX3N0cmluZyhzdGF0aWNfY2FzdDxp
bnQ+KHZbY3VycmVudF9pZHhdKSkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgY3JlYXRlIGEgSlNPTiB2
YWx1ZSBmcm9tIGEgZ2l2ZW4gQ0JPUiB2ZWN0b3IKLQotICAgIEBwYXJhbVtpbl0gdiAgQ0JPUiBz
ZXJpYWxpemF0aW9uCi0gICAgQHBhcmFtW2luXSBpZHggIGJ5dGUgaW5kZXggdG8gc3RhcnQgcmVh
ZGluZyBmcm9tIEBhIHYKLQotICAgIEByZXR1cm4gZGVzZXJpYWxpemVkIEpTT04gdmFsdWUKLQot
ICAgIEB0aHJvdyBzdGQ6OmludmFsaWRfYXJndW1lbnQgaWYgdW5zdXBwb3J0ZWQgZmVhdHVyZXMg
ZnJvbSBDQk9SIHdlcmUgdXNlZCBpbgotICAgIHRoZSBnaXZlbiB2ZWN0b3IgQGEgdiBvciBpZiB0
aGUgaW5wdXQgaXMgbm90IHZhbGlkIENCT1IKLSAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2Ug
aWYgdGhlIGdpdmVuIHZlY3RvciBlbmRzIHByZW1hdHVyZWx5Ci0KLSAgICBAc2EgaHR0cHM6Ly90
b29scy5pZXRmLm9yZy9odG1sL3JmYzcwNDkKLSAgICAqLwotICAgIHN0YXRpYyBiYXNpY19qc29u
IGZyb21fY2Jvcl9pbnRlcm5hbChjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgdiwgc2l6ZV90
JiBpZHgpCi0gICAgewotICAgICAgICAvLyBzdG9yZSBhbmQgaW5jcmVtZW50IGluZGV4Ci0gICAg
ICAgIGNvbnN0IHNpemVfdCBjdXJyZW50X2lkeCA9IGlkeCsrOwotCi0gICAgICAgIHN3aXRjaCAo
di5hdChjdXJyZW50X2lkeCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIEludGVnZXIgMHgw
MC4uMHgxNyAoMC4uMjMpCi0gICAgICAgICAgICBjYXNlIDB4MDA6Ci0gICAgICAgICAgICBjYXNl
IDB4MDE6Ci0gICAgICAgICAgICBjYXNlIDB4MDI6Ci0gICAgICAgICAgICBjYXNlIDB4MDM6Ci0g
ICAgICAgICAgICBjYXNlIDB4MDQ6Ci0gICAgICAgICAgICBjYXNlIDB4MDU6Ci0gICAgICAgICAg
ICBjYXNlIDB4MDY6Ci0gICAgICAgICAgICBjYXNlIDB4MDc6Ci0gICAgICAgICAgICBjYXNlIDB4
MDg6Ci0gICAgICAgICAgICBjYXNlIDB4MDk6Ci0gICAgICAgICAgICBjYXNlIDB4MGE6Ci0gICAg
ICAgICAgICBjYXNlIDB4MGI6Ci0gICAgICAgICAgICBjYXNlIDB4MGM6Ci0gICAgICAgICAgICBj
YXNlIDB4MGQ6Ci0gICAgICAgICAgICBjYXNlIDB4MGU6Ci0gICAgICAgICAgICBjYXNlIDB4MGY6
Ci0gICAgICAgICAgICBjYXNlIDB4MTA6Ci0gICAgICAgICAgICBjYXNlIDB4MTE6Ci0gICAgICAg
ICAgICBjYXNlIDB4MTI6Ci0gICAgICAgICAgICBjYXNlIDB4MTM6Ci0gICAgICAgICAgICBjYXNl
IDB4MTQ6Ci0gICAgICAgICAgICBjYXNlIDB4MTU6Ci0gICAgICAgICAgICBjYXNlIDB4MTY6Ci0g
ICAgICAgICAgICBjYXNlIDB4MTc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHZbY3VycmVudF9pZHhdOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIDB4
MTg6IC8vIFVuc2lnbmVkIGludGVnZXIgKG9uZS1ieXRlIHVpbnQ4X3QgZm9sbG93cykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZHggKz0gMTsgLy8gc2tpcCBjb250ZW50IGJ5dGUK
LSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0X2Zyb21fdmVjdG9yPHVpbnQ4X3Q+KHYsIGN1cnJl
bnRfaWR4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSAweDE5OiAvLyBVbnNp
Z25lZCBpbnRlZ2VyICh0d28tYnl0ZSB1aW50MTZfdCBmb2xsb3dzKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlkeCArPSAyOyAvLyBza2lwIDIgY29udGVudCBieXRlcwotICAgICAg
ICAgICAgICAgIHJldHVybiBnZXRfZnJvbV92ZWN0b3I8dWludDE2X3Q+KHYsIGN1cnJlbnRfaWR4
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSAweDFhOiAvLyBVbnNpZ25lZCBp
bnRlZ2VyIChmb3VyLWJ5dGUgdWludDMyX3QgZm9sbG93cykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZHggKz0gNDsgLy8gc2tpcCA0IGNvbnRlbnQgYnl0ZXMKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZ2V0X2Zyb21fdmVjdG9yPHVpbnQzMl90Pih2LCBjdXJyZW50X2lkeCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgMHgxYjogLy8gVW5zaWduZWQgaW50ZWdl
ciAoZWlnaHQtYnl0ZSB1aW50NjRfdCBmb2xsb3dzKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGlkeCArPSA4OyAvLyBza2lwIDggY29udGVudCBieXRlcwotICAgICAgICAgICAgICAg
IHJldHVybiBnZXRfZnJvbV92ZWN0b3I8dWludDY0X3Q+KHYsIGN1cnJlbnRfaWR4KTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gTmVnYXRpdmUgaW50ZWdlciAtMS0weDAwLi4tMS0w
eDE3ICgtMS4uLTI0KQotICAgICAgICAgICAgY2FzZSAweDIwOgotICAgICAgICAgICAgY2FzZSAw
eDIxOgotICAgICAgICAgICAgY2FzZSAweDIyOgotICAgICAgICAgICAgY2FzZSAweDIzOgotICAg
ICAgICAgICAgY2FzZSAweDI0OgotICAgICAgICAgICAgY2FzZSAweDI1OgotICAgICAgICAgICAg
Y2FzZSAweDI2OgotICAgICAgICAgICAgY2FzZSAweDI3OgotICAgICAgICAgICAgY2FzZSAweDI4
OgotICAgICAgICAgICAgY2FzZSAweDI5OgotICAgICAgICAgICAgY2FzZSAweDJhOgotICAgICAg
ICAgICAgY2FzZSAweDJiOgotICAgICAgICAgICAgY2FzZSAweDJjOgotICAgICAgICAgICAgY2Fz
ZSAweDJkOgotICAgICAgICAgICAgY2FzZSAweDJlOgotICAgICAgICAgICAgY2FzZSAweDJmOgot
ICAgICAgICAgICAgY2FzZSAweDMwOgotICAgICAgICAgICAgY2FzZSAweDMxOgotICAgICAgICAg
ICAgY2FzZSAweDMyOgotICAgICAgICAgICAgY2FzZSAweDMzOgotICAgICAgICAgICAgY2FzZSAw
eDM0OgotICAgICAgICAgICAgY2FzZSAweDM1OgotICAgICAgICAgICAgY2FzZSAweDM2OgotICAg
ICAgICAgICAgY2FzZSAweDM3OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ4X3Q+KDB4MjAgLSAxIC0gdltjdXJyZW50X2lkeF0pOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIDB4Mzg6IC8vIE5lZ2F0aXZlIGludGVnZXIgKG9u
ZS1ieXRlIHVpbnQ4X3QgZm9sbG93cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBp
ZHggKz0gMTsgLy8gc2tpcCBjb250ZW50IGJ5dGUKLSAgICAgICAgICAgICAgICAvLyBtdXN0IGJl
IHVpbnQ4X3QgIQotICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxudW1iZXJfaW50
ZWdlcl90PigtMSkgLSBnZXRfZnJvbV92ZWN0b3I8dWludDhfdD4odiwgY3VycmVudF9pZHgpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIDB4Mzk6IC8vIE5lZ2F0aXZlIGludGVn
ZXIgLTEtbiAodHdvLWJ5dGUgdWludDE2X3QgZm9sbG93cykKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBpZHggKz0gMjsgLy8gc2tpcCAyIGNvbnRlbnQgYnl0ZXMKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bnVtYmVyX2ludGVnZXJfdD4oLTEpIC0gZ2V0X2Zyb21f
dmVjdG9yPHVpbnQxNl90Pih2LCBjdXJyZW50X2lkeCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGNhc2UgMHgzYTogLy8gTmVnYXRpdmUgaW50ZWdlciAtMS1uIChmb3VyLWJ5dGUgdWlu
dDMyX3QgZm9sbG93cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZHggKz0gNDsg
Ly8gc2tpcCA0IGNvbnRlbnQgYnl0ZXMKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8bnVtYmVyX2ludGVnZXJfdD4oLTEpIC0gZ2V0X2Zyb21fdmVjdG9yPHVpbnQzMl90Pih2LCBj
dXJyZW50X2lkeCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgMHgzYjogLy8g
TmVnYXRpdmUgaW50ZWdlciAtMS1uIChlaWdodC1ieXRlIHVpbnQ2NF90IGZvbGxvd3MpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWR4ICs9IDg7IC8vIHNraXAgOCBjb250ZW50IGJ5
dGVzCi0gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PG51bWJlcl9pbnRlZ2VyX3Q+
KC0xKSAtIHN0YXRpY19jYXN0PG51bWJlcl9pbnRlZ2VyX3Q+KGdldF9mcm9tX3ZlY3Rvcjx1aW50
NjRfdD4odiwgY3VycmVudF9pZHgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
VVRGLTggc3RyaW5nICgweDAwLi4weDE3IGJ5dGVzIGZvbGxvdykKLSAgICAgICAgICAgIGNhc2Ug
MHg2MDoKLSAgICAgICAgICAgIGNhc2UgMHg2MToKLSAgICAgICAgICAgIGNhc2UgMHg2MjoKLSAg
ICAgICAgICAgIGNhc2UgMHg2MzoKLSAgICAgICAgICAgIGNhc2UgMHg2NDoKLSAgICAgICAgICAg
IGNhc2UgMHg2NToKLSAgICAgICAgICAgIGNhc2UgMHg2NjoKLSAgICAgICAgICAgIGNhc2UgMHg2
NzoKLSAgICAgICAgICAgIGNhc2UgMHg2ODoKLSAgICAgICAgICAgIGNhc2UgMHg2OToKLSAgICAg
ICAgICAgIGNhc2UgMHg2YToKLSAgICAgICAgICAgIGNhc2UgMHg2YjoKLSAgICAgICAgICAgIGNh
c2UgMHg2YzoKLSAgICAgICAgICAgIGNhc2UgMHg2ZDoKLSAgICAgICAgICAgIGNhc2UgMHg2ZToK
LSAgICAgICAgICAgIGNhc2UgMHg2ZjoKLSAgICAgICAgICAgIGNhc2UgMHg3MDoKLSAgICAgICAg
ICAgIGNhc2UgMHg3MToKLSAgICAgICAgICAgIGNhc2UgMHg3MjoKLSAgICAgICAgICAgIGNhc2Ug
MHg3MzoKLSAgICAgICAgICAgIGNhc2UgMHg3NDoKLSAgICAgICAgICAgIGNhc2UgMHg3NToKLSAg
ICAgICAgICAgIGNhc2UgMHg3NjoKLSAgICAgICAgICAgIGNhc2UgMHg3NzoKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4o
dltjdXJyZW50X2lkeF0gLSAweDYwKTsKLSAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qgb2Zm
c2V0ID0gY3VycmVudF9pZHggKyAxOwotICAgICAgICAgICAgICAgIGlkeCArPSBsZW47IC8vIHNr
aXAgY29udGVudCBieXRlcwotICAgICAgICAgICAgICAgIGNoZWNrX2xlbmd0aCh2LnNpemUoKSwg
bGVuLCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyhyZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPih2LmRhdGEoKSkgKyBvZmZzZXQsIGxlbik7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgMHg3ODogLy8gVVRGLTggc3RyaW5nIChvbmUtYnl0
ZSB1aW50OF90IGZvciBuIGZvbGxvd3MpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgYXV0byBsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGdldF9mcm9tX3ZlY3Rvcjx1aW50
OF90Pih2LCBjdXJyZW50X2lkeCkpOwotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvZmZz
ZXQgPSBjdXJyZW50X2lkeCArIDI7Ci0gICAgICAgICAgICAgICAgaWR4ICs9IGxlbiArIDE7IC8v
IHNraXAgc2l6ZSBieXRlICsgY29udGVudCBieXRlcwotICAgICAgICAgICAgICAgIGNoZWNrX2xl
bmd0aCh2LnNpemUoKSwgbGVuLCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6
OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2LmRhdGEoKSkgKyBvZmZzZXQs
IGxlbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgMHg3OTogLy8gVVRGLTgg
c3RyaW5nICh0d28tYnl0ZSB1aW50MTZfdCBmb3IgbiBmb2xsb3cpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgYXV0byBsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGdldF9m
cm9tX3ZlY3Rvcjx1aW50MTZfdD4odiwgY3VycmVudF9pZHgpKTsKLSAgICAgICAgICAgICAgICBj
b25zdCBzaXplX3Qgb2Zmc2V0ID0gY3VycmVudF9pZHggKyAzOwotICAgICAgICAgICAgICAgIGlk
eCArPSBsZW4gKyAyOyAvLyBza2lwIDIgc2l6ZSBieXRlcyArIGNvbnRlbnQgYnl0ZXMKLSAgICAg
ICAgICAgICAgICBjaGVja19sZW5ndGgodi5zaXplKCksIGxlbiwgb2Zmc2V0KTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
di5kYXRhKCkpICsgb2Zmc2V0LCBsZW4pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBj
YXNlIDB4N2E6IC8vIFVURi04IHN0cmluZyAoZm91ci1ieXRlIHVpbnQzMl90IGZvciBuIGZvbGxv
dykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGxlbiA9IHN0YXRp
Y19jYXN0PHNpemVfdD4oZ2V0X2Zyb21fdmVjdG9yPHVpbnQzMl90Pih2LCBjdXJyZW50X2lkeCkp
OwotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvZmZzZXQgPSBjdXJyZW50X2lkeCArIDU7
Ci0gICAgICAgICAgICAgICAgaWR4ICs9IGxlbiArIDQ7IC8vIHNraXAgNCBzaXplIGJ5dGVzICsg
Y29udGVudCBieXRlcwotICAgICAgICAgICAgICAgIGNoZWNrX2xlbmd0aCh2LnNpemUoKSwgbGVu
LCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyhyZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPih2LmRhdGEoKSkgKyBvZmZzZXQsIGxlbik7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGNhc2UgMHg3YjogLy8gVVRGLTggc3RyaW5nIChlaWdodC1ieXRl
IHVpbnQ2NF90IGZvciBuIGZvbGxvdykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBj
b25zdCBhdXRvIGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oZ2V0X2Zyb21fdmVjdG9yPHVpbnQ2
NF90Pih2LCBjdXJyZW50X2lkeCkpOwotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBvZmZz
ZXQgPSBjdXJyZW50X2lkeCArIDk7Ci0gICAgICAgICAgICAgICAgaWR4ICs9IGxlbiArIDg7IC8v
IHNraXAgOCBzaXplIGJ5dGVzICsgY29udGVudCBieXRlcwotICAgICAgICAgICAgICAgIGNoZWNr
X2xlbmd0aCh2LnNpemUoKSwgbGVuLCBvZmZzZXQpOwotICAgICAgICAgICAgICAgIHJldHVybiBz
dGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih2LmRhdGEoKSkgKyBvZmZz
ZXQsIGxlbik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgMHg3ZjogLy8gVVRG
LTggc3RyaW5nIChpbmRlZmluaXRlIGxlbmd0aCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBzdGQ6OnN0cmluZyByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKHYuYXQoaWR4
KSAhPSAweGZmKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5n
X3QgcyA9IGZyb21fY2Jvcl9pbnRlcm5hbCh2LCBpZHgpOwotICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgKz0gczsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gc2tpcCBi
cmVhayBieXRlICgweEZGKQotICAgICAgICAgICAgICAgIGlkeCArPSAxOwotICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGFycmF5
ICgweDAwLi4weDE3IGRhdGEgaXRlbXMgZm9sbG93KQotICAgICAgICAgICAgY2FzZSAweDgwOgot
ICAgICAgICAgICAgY2FzZSAweDgxOgotICAgICAgICAgICAgY2FzZSAweDgyOgotICAgICAgICAg
ICAgY2FzZSAweDgzOgotICAgICAgICAgICAgY2FzZSAweDg0OgotICAgICAgICAgICAgY2FzZSAw
eDg1OgotICAgICAgICAgICAgY2FzZSAweDg2OgotICAgICAgICAgICAgY2FzZSAweDg3OgotICAg
ICAgICAgICAgY2FzZSAweDg4OgotICAgICAgICAgICAgY2FzZSAweDg5OgotICAgICAgICAgICAg
Y2FzZSAweDhhOgotICAgICAgICAgICAgY2FzZSAweDhiOgotICAgICAgICAgICAgY2FzZSAweDhj
OgotICAgICAgICAgICAgY2FzZSAweDhkOgotICAgICAgICAgICAgY2FzZSAweDhlOgotICAgICAg
ICAgICAgY2FzZSAweDhmOgotICAgICAgICAgICAgY2FzZSAweDkwOgotICAgICAgICAgICAgY2Fz
ZSAweDkxOgotICAgICAgICAgICAgY2FzZSAweDkyOgotICAgICAgICAgICAgY2FzZSAweDkzOgot
ICAgICAgICAgICAgY2FzZSAweDk0OgotICAgICAgICAgICAgY2FzZSAweDk1OgotICAgICAgICAg
ICAgY2FzZSAweDk2OgotICAgICAgICAgICAgY2FzZSAweDk3OgotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGJhc2ljX2pzb24gcmVzdWx0ID0gdmFsdWVfdDo6YXJyYXk7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgYXV0byBsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHZbY3VycmVudF9p
ZHhdIC0gMHg4MCk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW47
ICsraSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNo
X2JhY2soZnJvbV9jYm9yX2ludGVybmFsKHYsIGlkeCkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBjYXNlIDB4OTg6IC8vIGFycmF5IChvbmUtYnl0ZSB1aW50OF90IGZvciBuIGZvbGxvd3MpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYmFzaWNfanNvbiByZXN1bHQgPSB2YWx1ZV90
OjphcnJheTsKLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGxlbiA9IHN0YXRpY19jYXN0PHNp
emVfdD4oZ2V0X2Zyb21fdmVjdG9yPHVpbnQ4X3Q+KHYsIGN1cnJlbnRfaWR4KSk7Ci0gICAgICAg
ICAgICAgICAgaWR4ICs9IDE7IC8vIHNraXAgMSBzaXplIGJ5dGUKLSAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhmcm9tX2Nib3JfaW50ZXJuYWwodiwgaWR4
KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgMHg5OTogLy8gYXJyYXkgKHR3by1ieXRl
IHVpbnQxNl90IGZvciBuIGZvbGxvdykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBi
YXNpY19qc29uIHJlc3VsdCA9IHZhbHVlX3Q6OmFycmF5OwotICAgICAgICAgICAgICAgIGNvbnN0
IGF1dG8gbGVuID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihnZXRfZnJvbV92ZWN0b3I8dWludDE2X3Q+
KHYsIGN1cnJlbnRfaWR4KSk7Ci0gICAgICAgICAgICAgICAgaWR4ICs9IDI7IC8vIHNraXAgNCBz
aXplIGJ5dGVzCi0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW47ICsr
aSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoX2Jh
Y2soZnJvbV9jYm9yX2ludGVybmFsKHYsIGlkeCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBj
YXNlIDB4OWE6IC8vIGFycmF5IChmb3VyLWJ5dGUgdWludDMyX3QgZm9yIG4gZm9sbG93KQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGJhc2ljX2pzb24gcmVzdWx0ID0gdmFsdWVfdDo6
YXJyYXk7Ci0gICAgICAgICAgICAgICAgY29uc3QgYXV0byBsZW4gPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGdldF9mcm9tX3ZlY3Rvcjx1aW50MzJfdD4odiwgY3VycmVudF9pZHgpKTsKLSAgICAgICAg
ICAgICAgICBpZHggKz0gNDsgLy8gc2tpcCA0IHNpemUgYnl0ZXMKLSAgICAgICAgICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhmcm9tX2Nib3JfaW50ZXJuYWwodiwgaWR4
KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgMHg5YjogLy8gYXJyYXkgKGVpZ2h0LWJ5
dGUgdWludDY0X3QgZm9yIG4gZm9sbG93KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGJhc2ljX2pzb24gcmVzdWx0ID0gdmFsdWVfdDo6YXJyYXk7Ci0gICAgICAgICAgICAgICAgY29u
c3QgYXV0byBsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGdldF9mcm9tX3ZlY3Rvcjx1aW50NjRf
dD4odiwgY3VycmVudF9pZHgpKTsKLSAgICAgICAgICAgICAgICBpZHggKz0gODsgLy8gc2tpcCA4
IHNpemUgYnl0ZXMKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsg
KytpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2hf
YmFjayhmcm9tX2Nib3JfaW50ZXJuYWwodiwgaWR4KSk7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGNhc2UgMHg5ZjogLy8gYXJyYXkgKGluZGVmaW5pdGUgbGVuZ3RoKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGJhc2ljX2pzb24gcmVzdWx0ID0gdmFsdWVfdDo6YXJyYXk7Ci0gICAg
ICAgICAgICAgICAgd2hpbGUgKHYuYXQoaWR4KSAhPSAweGZmKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFjayhmcm9tX2Nib3JfaW50ZXJuYWwo
diwgaWR4KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIHNraXAgYnJl
YWsgYnl0ZSAoMHhGRikKLSAgICAgICAgICAgICAgICBpZHggKz0gMTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBtYXAgKDB4
MDAuLjB4MTcgcGFpcnMgb2YgZGF0YSBpdGVtcyBmb2xsb3cpCi0gICAgICAgICAgICBjYXNlIDB4
YTA6Ci0gICAgICAgICAgICBjYXNlIDB4YTE6Ci0gICAgICAgICAgICBjYXNlIDB4YTI6Ci0gICAg
ICAgICAgICBjYXNlIDB4YTM6Ci0gICAgICAgICAgICBjYXNlIDB4YTQ6Ci0gICAgICAgICAgICBj
YXNlIDB4YTU6Ci0gICAgICAgICAgICBjYXNlIDB4YTY6Ci0gICAgICAgICAgICBjYXNlIDB4YTc6
Ci0gICAgICAgICAgICBjYXNlIDB4YTg6Ci0gICAgICAgICAgICBjYXNlIDB4YTk6Ci0gICAgICAg
ICAgICBjYXNlIDB4YWE6Ci0gICAgICAgICAgICBjYXNlIDB4YWI6Ci0gICAgICAgICAgICBjYXNl
IDB4YWM6Ci0gICAgICAgICAgICBjYXNlIDB4YWQ6Ci0gICAgICAgICAgICBjYXNlIDB4YWU6Ci0g
ICAgICAgICAgICBjYXNlIDB4YWY6Ci0gICAgICAgICAgICBjYXNlIDB4YjA6Ci0gICAgICAgICAg
ICBjYXNlIDB4YjE6Ci0gICAgICAgICAgICBjYXNlIDB4YjI6Ci0gICAgICAgICAgICBjYXNlIDB4
YjM6Ci0gICAgICAgICAgICBjYXNlIDB4YjQ6Ci0gICAgICAgICAgICBjYXNlIDB4YjU6Ci0gICAg
ICAgICAgICBjYXNlIDB4YjY6Ci0gICAgICAgICAgICBjYXNlIDB4Yjc6Ci0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgYmFzaWNfanNvbiByZXN1bHQgPSB2YWx1ZV90OjpvYmplY3Q7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgYXV0byBsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHZbY3Vy
cmVudF9pZHhdIC0gMHhhMCk7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW47ICsraSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIGtleSA9IGZyb21fY2Jvcl9pbnRlcm5hbCh2LCBpZHgpOwotICAgICAgICAgICAgICAg
ICAgICByZXN1bHRba2V5XSA9IGZyb21fY2Jvcl9pbnRlcm5hbCh2LCBpZHgpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBjYXNlIDB4Yjg6IC8vIG1hcCAob25lLWJ5dGUgdWludDhfdCBmb3IgbiBm
b2xsb3dzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJhc2ljX2pzb24gcmVzdWx0
ID0gdmFsdWVfdDo6b2JqZWN0OwotICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gbGVuID0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihnZXRfZnJvbV92ZWN0b3I8dWludDhfdD4odiwgY3VycmVudF9pZHgp
KTsKLSAgICAgICAgICAgICAgICBpZHggKz0gMTsgLy8gc2tpcCAxIHNpemUgYnl0ZQotICAgICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpCi0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBrZXkgPSBmcm9tX2Nib3JfaW50
ZXJuYWwodiwgaWR4KTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBmcm9tX2Ni
b3JfaW50ZXJuYWwodiwgaWR4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSAweGI5OiAv
LyBtYXAgKHR3by1ieXRlIHVpbnQxNl90IGZvciBuIGZvbGxvdykKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBiYXNpY19qc29uIHJlc3VsdCA9IHZhbHVlX3Q6Om9iamVjdDsKLSAgICAg
ICAgICAgICAgICBjb25zdCBhdXRvIGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oZ2V0X2Zyb21f
dmVjdG9yPHVpbnQxNl90Pih2LCBjdXJyZW50X2lkeCkpOwotICAgICAgICAgICAgICAgIGlkeCAr
PSAyOyAvLyBza2lwIDIgc2l6ZSBieXRlcwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGVuOyArK2kpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBzdGQ6OnN0cmluZyBrZXkgPSBmcm9tX2Nib3JfaW50ZXJuYWwodiwgaWR4KTsKLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBmcm9tX2Nib3JfaW50ZXJuYWwodiwgaWR4KTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgY2FzZSAweGJhOiAvLyBtYXAgKGZvdXItYnl0ZSB1aW50MzJf
dCBmb3IgbiBmb2xsb3cpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgYmFzaWNfanNv
biByZXN1bHQgPSB2YWx1ZV90OjpvYmplY3Q7Ci0gICAgICAgICAgICAgICAgY29uc3QgYXV0byBs
ZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGdldF9mcm9tX3ZlY3Rvcjx1aW50MzJfdD4odiwgY3Vy
cmVudF9pZHgpKTsKLSAgICAgICAgICAgICAgICBpZHggKz0gNDsgLy8gc2tpcCA0IHNpemUgYnl0
ZXMKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbjsgKytpKQotICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcga2V5ID0gZnJv
bV9jYm9yX2ludGVybmFsKHYsIGlkeCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXld
ID0gZnJvbV9jYm9yX2ludGVybmFsKHYsIGlkeCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNh
c2UgMHhiYjogLy8gbWFwIChlaWdodC1ieXRlIHVpbnQ2NF90IGZvciBuIGZvbGxvdykKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBiYXNpY19qc29uIHJlc3VsdCA9IHZhbHVlX3Q6Om9i
amVjdDsKLSAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGxlbiA9IHN0YXRpY19jYXN0PHNpemVf
dD4oZ2V0X2Zyb21fdmVjdG9yPHVpbnQ2NF90Pih2LCBjdXJyZW50X2lkeCkpOwotICAgICAgICAg
ICAgICAgIGlkeCArPSA4OyAvLyBza2lwIDggc2l6ZSBieXRlcwotICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuOyArK2kpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBrZXkgPSBmcm9tX2Nib3JfaW50ZXJuYWwodiwgaWR4
KTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBmcm9tX2Nib3JfaW50ZXJuYWwo
diwgaWR4KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSAweGJmOiAvLyBtYXAgKGluZGVm
aW5pdGUgbGVuZ3RoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJhc2ljX2pzb24g
cmVzdWx0ID0gdmFsdWVfdDo6b2JqZWN0OwotICAgICAgICAgICAgICAgIHdoaWxlICh2LmF0KGlk
eCkgIT0gMHhmZikKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN0ZDo6
c3RyaW5nIGtleSA9IGZyb21fY2Jvcl9pbnRlcm5hbCh2LCBpZHgpOwotICAgICAgICAgICAgICAg
ICAgICByZXN1bHRba2V5XSA9IGZyb21fY2Jvcl9pbnRlcm5hbCh2LCBpZHgpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBza2lwIGJyZWFrIGJ5dGUgKDB4RkYpCi0gICAg
ICAgICAgICAgICAgaWR4ICs9IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSAweGY0OiAvLyBmYWxzZQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgY2FzZSAweGY1OiAvLyB0cnVlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgMHhmNjog
Ly8gbnVsbAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZV90Ojpu
dWxsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIDB4Zjk6IC8vIEhhbGYtUHJl
Y2lzaW9uIEZsb2F0ICh0d28tYnl0ZSBJRUVFIDc1NCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBpZHggKz0gMjsgLy8gc2tpcCB0d28gY29udGVudCBieXRlcwotCi0gICAgICAgICAg
ICAgICAgLy8gY29kZSBmcm9tIFJGQyA3MDQ5LCBBcHBlbmRpeCBELCBGaWd1cmUgMzoKLSAgICAg
ICAgICAgICAgICAvLyBBcyBoYWxmLXByZWNpc2lvbiBmbG9hdGluZy1wb2ludCBudW1iZXJzIHdl
cmUgb25seSBhZGRlZCB0bwotICAgICAgICAgICAgICAgIC8vIElFRUUgNzU0IGluIDIwMDgsIHRv
ZGF5J3MgcHJvZ3JhbW1pbmcgcGxhdGZvcm1zIG9mdGVuIHN0aWxsCi0gICAgICAgICAgICAgICAg
Ly8gb25seSBoYXZlIGxpbWl0ZWQgc3VwcG9ydCBmb3IgdGhlbS4gSXQgaXMgdmVyeSBlYXN5IHRv
Ci0gICAgICAgICAgICAgICAgLy8gaW5jbHVkZSBhdCBsZWFzdCBkZWNvZGluZyBzdXBwb3J0IGZv
ciB0aGVtIGV2ZW4gd2l0aG91dCBzdWNoCi0gICAgICAgICAgICAgICAgLy8gc3VwcG9ydC4gQW4g
ZXhhbXBsZSBvZiBhIHNtYWxsIGRlY29kZXIgZm9yIGhhbGYtcHJlY2lzaW9uCi0gICAgICAgICAg
ICAgICAgLy8gZmxvYXRpbmctcG9pbnQgbnVtYmVycyBpbiB0aGUgQyBsYW5ndWFnZSBpcyBzaG93
biBpbiBGaWcuIDMuCi0gICAgICAgICAgICAgICAgY29uc3QgaW50IGhhbGYgPSAodi5hdChjdXJy
ZW50X2lkeCArIDEpIDw8IDgpICsgdi5hdChjdXJyZW50X2lkeCArIDIpOwotICAgICAgICAgICAg
ICAgIGNvbnN0IGludCBleHAgPSAoaGFsZiA+PiAxMCkgJiAweDFmOwotICAgICAgICAgICAgICAg
IGNvbnN0IGludCBtYW50ID0gaGFsZiAmIDB4M2ZmOwotICAgICAgICAgICAgICAgIGRvdWJsZSB2
YWw7Ci0gICAgICAgICAgICAgICAgaWYgKGV4cCA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgdmFsID0gc3RkOjpsZGV4cChtYW50LCAtMjQpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChleHAgIT0gMzEpCi0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICB2YWwgPSBzdGQ6OmxkZXhwKG1hbnQgKyAxMDI0
LCBleHAgLSAyNSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHZhbCA9IG1hbnQgPT0gMAotICAg
ICAgICAgICAgICAgICAgICAgICAgICA/IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5m
aW5pdHkoKQotICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHJldHVybiAoaGFsZiAmIDB4ODAwMCkgIT0gMCA/IC12YWwgOiB2YWw7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGNhc2UgMHhmYTogLy8gU2luZ2xlLVByZWNpc2lvbiBGbG9hdCAoZm91
ci1ieXRlIElFRUUgNzU0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGNvcHkg
Ynl0ZXMgaW4gcmV2ZXJzZSBvcmRlciBpbnRvIHRoZSBmbG9hdCB2YXJpYWJsZQotICAgICAgICAg
ICAgICAgIGZsb2F0IHJlczsKLSAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBieXRlID0gMDsg
Ynl0ZSA8IHNpemVvZihmbG9hdCk7ICsrYnl0ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZyZXMpW3NpemVvZihmbG9h
dCkgLSBieXRlIC0gMV0gPSB2LmF0KGN1cnJlbnRfaWR4ICsgMSArIGJ5dGUpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZHggKz0gc2l6ZW9mKGZsb2F0KTsgLy8gc2tpcCBj
b250ZW50IGJ5dGVzCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgY2FzZSAweGZiOiAvLyBEb3VibGUtUHJlY2lzaW9uIEZsb2F0IChlaWdo
dC1ieXRlIElFRUUgNzU0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGNvcHkg
Ynl0ZXMgaW4gcmV2ZXJzZSBvcmRlciBpbnRvIHRoZSBkb3VibGUgdmFyaWFibGUKLSAgICAgICAg
ICAgICAgICBkb3VibGUgcmVzOwotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGJ5dGUgPSAw
OyBieXRlIDwgc2l6ZW9mKGRvdWJsZSk7ICsrYnl0ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KCZyZXMpW3NpemVvZihk
b3VibGUpIC0gYnl0ZSAtIDFdID0gdi5hdChjdXJyZW50X2lkeCArIDEgKyBieXRlKTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWR4ICs9IHNpemVvZihkb3VibGUpOyAvLyBz
a2lwIGNvbnRlbnQgYnl0ZXMKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBkZWZhdWx0OiAvLyBhbnl0aGluZyBlbHNlICgweEZGIGlzIGhh
bmRsZWQgaW5zaWRlIHRoZSBvdGhlciB0eXBlcykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBKU09OX1RIUk9XKHN0ZDo6aW52YWxpZF9hcmd1bWVudCgiZXJyb3IgcGFyc2luZyBhIENC
T1IgQCAiICsgc3RkOjp0b19zdHJpbmcoY3VycmVudF9pZHgpICsgIjogIiArIHN0ZDo6dG9fc3Ry
aW5nKHN0YXRpY19jYXN0PGludD4odltjdXJyZW50X2lkeF0pKSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gIHB1YmxpYzoKLSAgICAvKiEKLSAgICBAYnJpZWYgY3JlYXRl
IGEgTWVzc2FnZVBhY2sgc2VyaWFsaXphdGlvbiBvZiBhIGdpdmVuIEpTT04gdmFsdWUKLQotICAg
IFNlcmlhbGl6ZXMgYSBnaXZlbiBKU09OIHZhbHVlIEBhIGogdG8gYSBieXRlIHZlY3RvciB1c2lu
ZyB0aGUgTWVzc2FnZVBhY2sKLSAgICBzZXJpYWxpemF0aW9uIGZvcm1hdC4gTWVzc2FnZVBhY2sg
aXMgYSBiaW5hcnkgc2VyaWFsaXphdGlvbiBmb3JtYXQgd2hpY2gKLSAgICBhaW1zIHRvIGJlIG1v
cmUgY29tcGFjdCB0aGFuIEpTT04gaXRzZWxmLCB5ZXQgbW9yZSBlZmZpY2llbnQgdG8gcGFyc2Uu
Ci0KLSAgICBAcGFyYW1baW5dIGogIEpTT04gdmFsdWUgdG8gc2VyaWFsaXplCi0gICAgQHJldHVy
biBNZXNzYWdlUGFjayBzZXJpYWxpemF0aW9uIGFzIGJ5dGUgdmVjdG9yCi0KLSAgICBAY29tcGxl
eGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIEpTT04gdmFsdWUgQGEgai4KLQotICAgIEBs
aXZlZXhhbXBsZXtUaGUgZXhhbXBsZSBzaG93cyB0aGUgc2VyaWFsaXphdGlvbiBvZiBhIEpTT04g
dmFsdWUgdG8gYSBieXRlCi0gICAgdmVjdG9yIGluIE1lc3NhZ2VQYWNrIGZvcm1hdC4sdG9fbXNn
cGFja30KLQotICAgIEBzYSBodHRwOi8vbXNncGFjay5vcmcKLSAgICBAc2EgQHJlZiBmcm9tX21z
Z3BhY2soY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mLCBjb25zdCBzaXplX3QpIGZvciB0aGUK
LSAgICAgICAgYW5hbG9nb3VzIGRlc2VyaWFsaXphdGlvbgotICAgIEBzYSBAcmVmIHRvX2Nib3Io
Y29uc3QgYmFzaWNfanNvbiYgZm9yIHRoZSByZWxhdGVkIENCT1IgZm9ybWF0Ci0KLSAgICBAc2lu
Y2UgdmVyc2lvbiAyLjAuOQotICAgICovCi0gICAgc3RhdGljIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+
IHRvX21zZ3BhY2soY29uc3QgYmFzaWNfanNvbiYgaikKLSAgICB7Ci0gICAgICAgIHN0ZDo6dmVj
dG9yPHVpbnQ4X3Q+IHJlc3VsdDsKLSAgICAgICAgdG9fbXNncGFja19pbnRlcm5hbChqLCByZXN1
bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmll
ZiBjcmVhdGUgYSBKU09OIHZhbHVlIGZyb20gYSBieXRlIHZlY3RvciBpbiBNZXNzYWdlUGFjayBm
b3JtYXQKLQotICAgIERlc2VyaWFsaXplcyBhIGdpdmVuIGJ5dGUgdmVjdG9yIEBhIHYgdG8gYSBK
U09OIHZhbHVlIHVzaW5nIHRoZSBNZXNzYWdlUGFjawotICAgIHNlcmlhbGl6YXRpb24gZm9ybWF0
LgotCi0gICAgQHBhcmFtW2luXSB2ICBhIGJ5dGUgdmVjdG9yIGluIE1lc3NhZ2VQYWNrIGZvcm1h
dAotICAgIEBwYXJhbVtpbl0gc3RhcnRfaW5kZXggdGhlIGluZGV4IHRvIHN0YXJ0IHJlYWRpbmcg
ZnJvbSBAYSB2ICgwIGJ5IGRlZmF1bHQpCi0gICAgQHJldHVybiBkZXNlcmlhbGl6ZWQgSlNPTiB2
YWx1ZQotCi0gICAgQHRocm93IHN0ZDo6aW52YWxpZF9hcmd1bWVudCBpZiB1bnN1cHBvcnRlZCBm
ZWF0dXJlcyBmcm9tIE1lc3NhZ2VQYWNrIHdlcmUKLSAgICB1c2VkIGluIHRoZSBnaXZlbiB2ZWN0
b3IgQGEgdiBvciBpZiB0aGUgaW5wdXQgaXMgbm90IHZhbGlkIE1lc3NhZ2VQYWNrCi0gICAgQHRo
cm93IHN0ZDo6b3V0X29mX3JhbmdlIGlmIHRoZSBnaXZlbiB2ZWN0b3IgZW5kcyBwcmVtYXR1cmVs
eQotCi0gICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBieXRlIHZlY3Rv
ciBAYSB2LgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBleGFtcGxlIHNob3dzIHRoZSBkZXNlcmlh
bGl6YXRpb24gb2YgYSBieXRlIHZlY3RvciBpbgotICAgIE1lc3NhZ2VQYWNrIGZvcm1hdCB0byBh
IEpTT04gdmFsdWUuLGZyb21fbXNncGFja30KLQotICAgIEBzYSBodHRwOi8vbXNncGFjay5vcmcK
LSAgICBAc2EgQHJlZiB0b19tc2dwYWNrKGNvbnN0IGJhc2ljX2pzb24mKSBmb3IgdGhlIGFuYWxv
Z291cyBzZXJpYWxpemF0aW9uCi0gICAgQHNhIEByZWYgZnJvbV9jYm9yKGNvbnN0IHN0ZDo6dmVj
dG9yPHVpbnQ4X3Q+JiwgY29uc3Qgc2l6ZV90KSBmb3IgdGhlCi0gICAgICAgIHJlbGF0ZWQgQ0JP
UiBmb3JtYXQKLQotICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC45LCBwYXJhbWV0ZXIgQGEgc3RhcnRf
aW5kZXggc2luY2UgMi4xLjEKLSAgICAqLwotICAgIHN0YXRpYyBiYXNpY19qc29uIGZyb21fbXNn
cGFjayhjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYgdiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IHN0YXJ0X2luZGV4ID0gMCkKLSAgICB7Ci0gICAg
ICAgIHNpemVfdCBpID0gc3RhcnRfaW5kZXg7Ci0gICAgICAgIHJldHVybiBmcm9tX21zZ3BhY2tf
aW50ZXJuYWwodiwgaSk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVmIGNyZWF0ZSBhIE1l
c3NhZ2VQYWNrIHNlcmlhbGl6YXRpb24gb2YgYSBnaXZlbiBKU09OIHZhbHVlCi0KLSAgICBTZXJp
YWxpemVzIGEgZ2l2ZW4gSlNPTiB2YWx1ZSBAYSBqIHRvIGEgYnl0ZSB2ZWN0b3IgdXNpbmcgdGhl
IENCT1IgKENvbmNpc2UKLSAgICBCaW5hcnkgT2JqZWN0IFJlcHJlc2VudGF0aW9uKSBzZXJpYWxp
emF0aW9uIGZvcm1hdC4gQ0JPUiBpcyBhIGJpbmFyeQotICAgIHNlcmlhbGl6YXRpb24gZm9ybWF0
IHdoaWNoIGFpbXMgdG8gYmUgbW9yZSBjb21wYWN0IHRoYW4gSlNPTiBpdHNlbGYsIHlldAotICAg
IG1vcmUgZWZmaWNpZW50IHRvIHBhcnNlLgotCi0gICAgQHBhcmFtW2luXSBqICBKU09OIHZhbHVl
IHRvIHNlcmlhbGl6ZQotICAgIEByZXR1cm4gTWVzc2FnZVBhY2sgc2VyaWFsaXphdGlvbiBhcyBi
eXRlIHZlY3RvcgotCi0gICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBzaXplIG9mIHRoZSBK
U09OIHZhbHVlIEBhIGouCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgdGhl
IHNlcmlhbGl6YXRpb24gb2YgYSBKU09OIHZhbHVlIHRvIGEgYnl0ZQotICAgIHZlY3RvciBpbiBD
Qk9SIGZvcm1hdC4sdG9fY2Jvcn0KLQotICAgIEBzYSBodHRwOi8vY2Jvci5pbwotICAgIEBzYSBA
cmVmIGZyb21fY2Jvcihjb25zdCBzdGQ6OnZlY3Rvcjx1aW50OF90PiYsIGNvbnN0IHNpemVfdCkg
Zm9yIHRoZQotICAgICAgICBhbmFsb2dvdXMgZGVzZXJpYWxpemF0aW9uCi0gICAgQHNhIEByZWYg
dG9fbXNncGFjayhjb25zdCBiYXNpY19qc29uJiBmb3IgdGhlIHJlbGF0ZWQgTWVzc2FnZVBhY2sg
Zm9ybWF0Ci0KLSAgICBAc2luY2UgdmVyc2lvbiAyLjAuOQotICAgICovCi0gICAgc3RhdGljIHN0
ZDo6dmVjdG9yPHVpbnQ4X3Q+IHRvX2Nib3IoY29uc3QgYmFzaWNfanNvbiYgaikKLSAgICB7Ci0g
ICAgICAgIHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKLSAgICAgICAgdG9fY2Jvcl9pbnRl
cm5hbChqLCByZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIC8q
IQotICAgIEBicmllZiBjcmVhdGUgYSBKU09OIHZhbHVlIGZyb20gYSBieXRlIHZlY3RvciBpbiBD
Qk9SIGZvcm1hdAotCi0gICAgRGVzZXJpYWxpemVzIGEgZ2l2ZW4gYnl0ZSB2ZWN0b3IgQGEgdiB0
byBhIEpTT04gdmFsdWUgdXNpbmcgdGhlIENCT1IKLSAgICAoQ29uY2lzZSBCaW5hcnkgT2JqZWN0
IFJlcHJlc2VudGF0aW9uKSBzZXJpYWxpemF0aW9uIGZvcm1hdC4KLQotICAgIEBwYXJhbVtpbl0g
diAgYSBieXRlIHZlY3RvciBpbiBDQk9SIGZvcm1hdAotICAgIEBwYXJhbVtpbl0gc3RhcnRfaW5k
ZXggdGhlIGluZGV4IHRvIHN0YXJ0IHJlYWRpbmcgZnJvbSBAYSB2ICgwIGJ5IGRlZmF1bHQpCi0g
ICAgQHJldHVybiBkZXNlcmlhbGl6ZWQgSlNPTiB2YWx1ZQotCi0gICAgQHRocm93IHN0ZDo6aW52
YWxpZF9hcmd1bWVudCBpZiB1bnN1cHBvcnRlZCBmZWF0dXJlcyBmcm9tIENCT1Igd2VyZSB1c2Vk
IGluCi0gICAgdGhlIGdpdmVuIHZlY3RvciBAYSB2IG9yIGlmIHRoZSBpbnB1dCBpcyBub3QgdmFs
aWQgTWVzc2FnZVBhY2sKLSAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYgdGhlIGdpdmVu
IHZlY3RvciBlbmRzIHByZW1hdHVyZWx5Ci0KLSAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhl
IHNpemUgb2YgdGhlIGJ5dGUgdmVjdG9yIEBhIHYuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4
YW1wbGUgc2hvd3MgdGhlIGRlc2VyaWFsaXphdGlvbiBvZiBhIGJ5dGUgdmVjdG9yIGluIENCT1IK
LSAgICBmb3JtYXQgdG8gYSBKU09OIHZhbHVlLixmcm9tX2Nib3J9Ci0KLSAgICBAc2EgaHR0cDov
L2Nib3IuaW8KLSAgICBAc2EgQHJlZiB0b19jYm9yKGNvbnN0IGJhc2ljX2pzb24mKSBmb3IgdGhl
IGFuYWxvZ291cyBzZXJpYWxpemF0aW9uCi0gICAgQHNhIEByZWYgZnJvbV9tc2dwYWNrKGNvbnN0
IHN0ZDo6dmVjdG9yPHVpbnQ4X3Q+JiwgY29uc3Qgc2l6ZV90KSBmb3IgdGhlCi0gICAgICAgIHJl
bGF0ZWQgTWVzc2FnZVBhY2sgZm9ybWF0Ci0KLSAgICBAc2luY2UgdmVyc2lvbiAyLjAuOSwgcGFy
YW1ldGVyIEBhIHN0YXJ0X2luZGV4IHNpbmNlIDIuMS4xCi0gICAgKi8KLSAgICBzdGF0aWMgYmFz
aWNfanNvbiBmcm9tX2Nib3IoY29uc3Qgc3RkOjp2ZWN0b3I8dWludDhfdD4mIHYsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBzdGFydF9pbmRleCA9IDApCi0g
ICAgewotICAgICAgICBzaXplX3QgaSA9IHN0YXJ0X2luZGV4OwotICAgICAgICByZXR1cm4gZnJv
bV9jYm9yX2ludGVybmFsKHYsIGkpOwotICAgIH0KLQotICAgIC8vLyBAfQotCi0gICAgLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gY29udmVuaWVuY2UgZnVuY3Rpb25zIC8vCi0g
ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgICAvKiEKLSAgICBAYnJpZWYgcmV0
dXJuIHRoZSB0eXBlIGFzIHN0cmluZwotCi0gICAgUmV0dXJucyB0aGUgdHlwZSBuYW1lIGFzIHN0
cmluZyB0byBiZSB1c2VkIGluIGVycm9yIG1lc3NhZ2VzIC0gdXN1YWxseSB0bwotICAgIGluZGlj
YXRlIHRoYXQgYSBmdW5jdGlvbiB3YXMgY2FsbGVkIG9uIGEgd3JvbmcgSlNPTiB0eXBlLgotCi0g
ICAgQHJldHVybiBiYXNpY2FsbHkgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB0aGUgQGEg
bV90eXBlIG1lbWJlcgotCi0gICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCi0KLSAgICBAbGl2ZWV4
YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIGV4ZW1wbGlmaWVzIGB0eXBlX25hbWUoKWAgZm9yIGFs
bCBKU09OCi0gICAgdHlwZXMuLHR5cGVfbmFtZX0KLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4w
LCBwdWJsaWMgc2luY2UgMi4xLjAKLSAgICAqLwotICAgIHN0ZDo6c3RyaW5nIHR5cGVfbmFtZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiAibnVsbCI7Ci0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90
OjpvYmplY3Q6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAib2JqZWN0IjsKLSAgICAgICAg
ICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ImFycmF5IjsKLSAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OnN0cmluZzoKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwotICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVf
dDo6Ym9vbGVhbjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJib29sZWFuIjsKLSAgICAg
ICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmRpc2NhcmRlZDoKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJkaXNjYXJkZWQiOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiAibnVtYmVyIjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICBwcml2YXRlOgotICAgIC8qIQotICAgIEBicmllZiBjYWxjdWxhdGVzIHRoZSBleHRy
YSBzcGFjZSB0byBlc2NhcGUgYSBKU09OIHN0cmluZwotCi0gICAgQHBhcmFtW2luXSBzICB0aGUg
c3RyaW5nIHRvIGVzY2FwZQotICAgIEByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJl
cXVpcmVkIHRvIGVzY2FwZSBzdHJpbmcgQGEgcwotCi0gICAgQGNvbXBsZXhpdHkgTGluZWFyIGlu
IHRoZSBsZW5ndGggb2Ygc3RyaW5nIEBhIHMuCi0gICAgKi8KLSAgICBzdGF0aWMgc3RkOjpzaXpl
X3QgZXh0cmFfc3BhY2UoY29uc3Qgc3RyaW5nX3QmIHMpIG5vZXhjZXB0Ci0gICAgewotICAgICAg
ICByZXR1cm4gc3RkOjphY2N1bXVsYXRlKHMuYmVnaW4oKSwgcy5lbmQoKSwgc2l6ZV90e30sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10oc2l6ZV90IHJlcywgdHlwZW5hbWUgc3Ry
aW5nX3Q6OnZhbHVlX3R5cGUgYykKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoIChjKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgJyInOgotICAgICAgICAgICAgICAg
IGNhc2UgJ1xcJzoKLSAgICAgICAgICAgICAgICBjYXNlICdcYic6Ci0gICAgICAgICAgICAgICAg
Y2FzZSAnXGYnOgotICAgICAgICAgICAgICAgIGNhc2UgJ1xuJzoKLSAgICAgICAgICAgICAgICBj
YXNlICdccic6Ci0gICAgICAgICAgICAgICAgY2FzZSAnXHQnOgotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgLy8gZnJvbSBjICgxIGJ5dGUpIHRvIFx4ICgyIGJ5dGVzKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzICsgMTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGMgPj0gMHgwMCBhbmQgYyA8PSAweDFmKQotICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBmcm9tIGMgKDEgYnl0ZSkgdG8gXHV4eHh4
ICg2IGJ5dGVzKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlcyArIDU7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgfQotCi0gICAg
LyohCi0gICAgQGJyaWVmIGVzY2FwZSBhIHN0cmluZwotCi0gICAgRXNjYXBlIGEgc3RyaW5nIGJ5
IHJlcGxhY2luZyBjZXJ0YWluIHNwZWNpYWwgY2hhcmFjdGVycyBieSBhIHNlcXVlbmNlIG9mCi0g
ICAgYW4gZXNjYXBlIGNoYXJhY3RlciAoYmFja3NsYXNoKSBhbmQgYW5vdGhlciBjaGFyYWN0ZXIg
YW5kIG90aGVyIGNvbnRyb2wKLSAgICBjaGFyYWN0ZXJzIGJ5IGEgc2VxdWVuY2Ugb2YgIlx1IiBm
b2xsb3dlZCBieSBhIGZvdXItZGlnaXQgaGV4Ci0gICAgcmVwcmVzZW50YXRpb24uCi0KLSAgICBA
cGFyYW1baW5dIHMgIHRoZSBzdHJpbmcgdG8gZXNjYXBlCi0gICAgQHJldHVybiAgdGhlIGVzY2Fw
ZWQgc3RyaW5nCi0KLSAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiBzdHJp
bmcgQGEgcy4KLSAgICAqLwotICAgIHN0YXRpYyBzdHJpbmdfdCBlc2NhcGVfc3RyaW5nKGNvbnN0
IHN0cmluZ190JiBzKQotICAgIHsKLSAgICAgICAgY29uc3QgYXV0byBzcGFjZSA9IGV4dHJhX3Nw
YWNlKHMpOwotICAgICAgICBpZiAoc3BhY2UgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIHM7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjcmVhdGUgYSByZXN1bHQgc3RyaW5n
IG9mIG5lY2Vzc2FyeSBzaXplCi0gICAgICAgIHN0cmluZ190IHJlc3VsdChzLnNpemUoKSArIHNw
YWNlLCAnXFwnKTsKLSAgICAgICAgc3RkOjpzaXplX3QgcG9zID0gMDsKLQotICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGMgOiBzKQotICAgICAgICB7Ci0gICAgICAgICAgICBzd2l0Y2ggKGMpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gcXVvdGF0aW9uIG1hcmsgKDB4MjIpCi0g
ICAgICAgICAgICAgICAgY2FzZSAnIic6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXN1bHRbcG9zICsgMV0gPSAnIic7Ci0gICAgICAgICAgICAgICAgICAgIHBvcyAr
PSAyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAvLyByZXZlcnNlIHNvbGlkdXMgKDB4NWMpCi0gICAgICAgICAgICAgICAg
Y2FzZSAnXFwnOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gbm90
aGluZyB0byBjaGFuZ2UKLSAgICAgICAgICAgICAgICAgICAgcG9zICs9IDI7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8v
IGJhY2tzcGFjZSAoMHgwOCkKLSAgICAgICAgICAgICAgICBjYXNlICdcYic6Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXN1bHRbcG9zICsgMV0gPSAnYic7Ci0gICAg
ICAgICAgICAgICAgICAgIHBvcyArPSAyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBmb3JtZmVlZCAoMHgwYykKLSAg
ICAgICAgICAgICAgICBjYXNlICdcZic6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICByZXN1bHRbcG9zICsgMV0gPSAnZic7Ci0gICAgICAgICAgICAgICAgICAgIHBvcyAr
PSAyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAvLyBuZXdsaW5lICgweDBhKQotICAgICAgICAgICAgICAgIGNhc2UgJ1xu
JzoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtwb3MgKyAx
XSA9ICduJzsKLSAgICAgICAgICAgICAgICAgICAgcG9zICs9IDI7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGNhcnJp
YWdlIHJldHVybiAoMHgwZCkKLSAgICAgICAgICAgICAgICBjYXNlICdccic6Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXN1bHRbcG9zICsgMV0gPSAncic7Ci0gICAg
ICAgICAgICAgICAgICAgIHBvcyArPSAyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBob3Jpem9udGFsIHRhYiAoMHgw
OSkKLSAgICAgICAgICAgICAgICBjYXNlICdcdCc6Ci0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXN1bHRbcG9zICsgMV0gPSAndCc7Ci0gICAgICAgICAgICAgICAgICAg
IHBvcyArPSAyOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGMgPj0gMHgwMCBhbmQgYyA8PSAweDFmKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IGEgbnVtYmVyIDAuLjE1
IHRvIGl0cyBoZXggcmVwcmVzZW50YXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICgw
Li5mKQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaGV4aWZ5WzE2
XSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJzgnLCAnOScsICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBy
aW50IGNoYXJhY3RlciBjIGFzIFx1eHh4eAotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChj
b25zdCBjaGFyIG0gOgotICAgICAgICAgICAgICAgICAgICB7ICd1JywgJzAnLCAnMCcsIGhleGlm
eVtjID4+IDRdLCBoZXhpZnlbYyAmIDB4MGZdCi0gICAgICAgICAgICAgICAgICAgICAgICB9KQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdFsrK3Bvc10gPSBtOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgICAgICArK3BvczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGFsbCBvdGhlciBjaGFyYWN0ZXJzIGFyZSBhZGRlZCBhcy1pcwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0W3BvcysrXSA9IGM7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLQotICAgIC8q
IQotICAgIEBicmllZiBsb2NhbGUtaW5kZXBlbmRlbnQgc2VyaWFsaXphdGlvbiBmb3IgYnVpbHQt
aW4gYXJpdGhtZXRpYyB0eXBlcwotICAgICovCi0gICAgc3RydWN0IG51bXRvc3RyCi0gICAgewot
ICAgICAgcHVibGljOgotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOdW1iZXJUeXBlPgotICAg
ICAgICBudW10b3N0cihOdW1iZXJUeXBlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICB4
X3dyaXRlKHZhbHVlLCBzdGQ6OmlzX2ludGVncmFsPE51bWJlclR5cGU+KCkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgY29uc3QgY2hhciogY19zdHIoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9idWYuZGF0YSgpOwotICAgICAgICB9Ci0KLSAgICAgIHByaXZhdGU6Ci0g
ICAgICAgIC8vLyBhIChob3BlZnVsbHkpIGxhcmdlIGVub3VnaCBjaGFyYWN0ZXIgYnVmZmVyCi0g
ICAgICAgIHN0ZDo6YXJyYXkgPCBjaGFyLCA2NCA+IG1fYnVme3t9fTsKLQotICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBOdW1iZXJUeXBlPgotICAgICAgICB2b2lkIHhfd3JpdGUoTnVtYmVyVHlw
ZSB4LCAvKmlzX2ludGVncmFsPSovc3RkOjp0cnVlX3R5cGUpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgIjAiCi0gICAgICAgICAgICBpZiAoeCA9PSAwKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1fYnVmWzBdID0gJzAnOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3QgYm9vbCBpc19u
ZWdhdGl2ZSA9IHggPCAwOwotICAgICAgICAgICAgc2l6ZV90IGkgPSAwOwotCi0gICAgICAgICAg
ICAvLyBzcGFyZSAxIGJ5dGUgZm9yICdcMCcKLSAgICAgICAgICAgIHdoaWxlICh4ICE9IDAgYW5k
IGkgPCBtX2J1Zi5zaXplKCkgLSAxKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNv
bnN0IGF1dG8gZGlnaXQgPSBzdGQ6OmxhYnMoc3RhdGljX2Nhc3Q8bG9uZz4oeCAlIDEwKSk7Ci0g
ICAgICAgICAgICAgICAgbV9idWZbaSsrXSA9IHN0YXRpY19jYXN0PGNoYXI+KCcwJyArIGRpZ2l0
KTsKLSAgICAgICAgICAgICAgICB4IC89IDEwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAvLyBtYWtlIHN1cmUgdGhlIG51bWJlciBoYXMgYmVlbiBwcm9jZXNzZWQgY29tcGxldGVseQot
ICAgICAgICAgICAgYXNzZXJ0KHggPT0gMCk7Ci0KLSAgICAgICAgICAgIGlmIChpc19uZWdhdGl2
ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlcmUgaXMg
Y2FwYWNpdHkgZm9yIHRoZSAnLScKLSAgICAgICAgICAgICAgICBhc3NlcnQoaSA8IG1fYnVmLnNp
emUoKSAtIDIpOwotICAgICAgICAgICAgICAgIG1fYnVmW2krK10gPSAnLSc7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHN0ZDo6cmV2ZXJzZShtX2J1Zi5iZWdpbigpLCBtX2J1Zi5iZWdp
bigpICsgaSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBOdW1iZXJU
eXBlPgotICAgICAgICB2b2lkIHhfd3JpdGUoTnVtYmVyVHlwZSB4LCAvKmlzX2ludGVncmFsPSov
c3RkOjpmYWxzZV90eXBlKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2Ug
Zm9yIDAuMCBhbmQgLTAuMAotICAgICAgICAgICAgaWYgKHggPT0gMCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBzaXplX3QgaSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKHN0ZDo6
c2lnbmJpdCh4KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYnVm
W2krK10gPSAnLSc7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fYnVmW2kr
K10gPSAnMCc7Ci0gICAgICAgICAgICAgICAgbV9idWZbaSsrXSA9ICcuJzsKLSAgICAgICAgICAg
ICAgICBtX2J1ZltpXSA9ICcwJzsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIGdldCBudW1iZXIgb2YgZGlnaXRzIGZvciBhIHRleHQgLT4g
ZmxvYXQgLT4gdGV4dCByb3VuZC10cmlwCi0gICAgICAgICAgICBzdGF0aWMgY29uc3RleHByIGF1
dG8gZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8TnVtYmVyVHlwZT46OmRpZ2l0czEwOwotCi0gICAg
ICAgICAgICAvLyB0aGUgYWN0dWFsIGNvbnZlcnNpb24KLSAgICAgICAgICAgIGNvbnN0IGF1dG8g
d3JpdHRlbl9ieXRlcyA9IHNucHJpbnRmKG1fYnVmLmRhdGEoKSwgbV9idWYuc2l6ZSgpLCAiJS4q
ZyIsIGQsIHgpOwotCi0gICAgICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSBpbmRpY2F0ZXMgYW4g
ZXJyb3IKLSAgICAgICAgICAgIGFzc2VydCh3cml0dGVuX2J5dGVzID4gMCk7Ci0gICAgICAgICAg
ICAvLyBjaGVjayBpZiBidWZmZXIgd2FzIGxhcmdlIGVub3VnaAotICAgICAgICAgICAgYXNzZXJ0
KHN0YXRpY19jYXN0PHNpemVfdD4od3JpdHRlbl9ieXRlcykgPCBtX2J1Zi5zaXplKCkpOwotCi0g
ICAgICAgICAgICAvLyByZWFkIGluZm9ybWF0aW9uIGZyb20gbG9jYWxlCi0gICAgICAgICAgICBj
b25zdCBhdXRvIGxvYyA9IGxvY2FsZWNvbnYoKTsKLSAgICAgICAgICAgIGFzc2VydChsb2MgIT0g
bnVsbHB0cik7Ci0gICAgICAgICAgICBjb25zdCBjaGFyIHRob3VzYW5kc19zZXAgPSAhbG9jLT50
aG91c2FuZHNfc2VwID8gJ1wwJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBsb2MtPnRob3VzYW5kc19zZXBbMF07Ci0KLSAgICAgICAgICAgIGNvbnN0IGNoYXIgZGVj
aW1hbF9wb2ludCA9ICFsb2MtPmRlY2ltYWxfcG9pbnQgPyAnXDAnCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IGxvYy0+ZGVjaW1hbF9wb2ludFswXTsKLQotICAgICAg
ICAgICAgLy8gZXJhc2UgdGhvdXNhbmRzIHNlcGFyYXRvcgotICAgICAgICAgICAgaWYgKHRob3Vz
YW5kc19zZXAgIT0gJ1wwJykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBh
dXRvIGVuZCA9IHN0ZDo6cmVtb3ZlKG1fYnVmLmJlZ2luKCksIG1fYnVmLmJlZ2luKCkgKyB3cml0
dGVuX2J5dGVzLCB0aG91c2FuZHNfc2VwKTsKLSAgICAgICAgICAgICAgICBzdGQ6OmZpbGwoZW5k
LCBtX2J1Zi5lbmQoKSwgJ1wwJyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGNv
bnZlcnQgZGVjaW1hbCBwb2ludCB0byAnLicKLSAgICAgICAgICAgIGlmIChkZWNpbWFsX3BvaW50
ICE9ICdcMCcgYW5kIGRlY2ltYWxfcG9pbnQgIT0gJy4nKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGZvciAoYXV0byYgYyA6IG1fYnVmKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGMgPT0gZGVjaW1hbF9wb2ludCkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICcuJzsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBkZXRlcm1pbmUgaWYgbmVlZCB0byBhcHBl
bmQgIi4wIgotICAgICAgICAgICAgc2l6ZV90IGkgPSAwOwotICAgICAgICAgICAgYm9vbCB2YWx1
ZV9pc19pbnRfbGlrZSA9IHRydWU7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbV9idWYu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gYnJlYWsgd2hl
biBlbmQgb2YgbnVtYmVyIGlzIHJlYWNoZWQKLSAgICAgICAgICAgICAgICBpZiAobV9idWZbaV0g
PT0gJ1wwJykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHdlIGZpbmQg
bm9uLWludCBjaGFyYWN0ZXIKLSAgICAgICAgICAgICAgICB2YWx1ZV9pc19pbnRfbGlrZSA9IHZh
bHVlX2lzX2ludF9saWtlIGFuZCBtX2J1ZltpXSAhPSAnLicgYW5kCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2J1ZltpXSAhPSAnZScgYW5kIG1fYnVmW2ldICE9ICdFJzsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHZhbHVlX2lzX2ludF9saWtlKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIHRoZXJlIG11c3QgYmUgMiBieXRlcyBsZWZ0
IGZvciAiLjAiCi0gICAgICAgICAgICAgICAgYXNzZXJ0KChpICsgMikgPCBtX2J1Zi5zaXplKCkp
OwotICAgICAgICAgICAgICAgIC8vIHdlIHdyaXRlIHRvIHRoZSBlbmQgb2YgdGhlIG51bWJlcgot
ICAgICAgICAgICAgICAgIGFzc2VydChtX2J1ZltpXSA9PSAnXDAnKTsKLSAgICAgICAgICAgICAg
ICBhc3NlcnQobV9idWZbaSAtIDFdICE9ICdcMCcpOwotCi0gICAgICAgICAgICAgICAgLy8gYWRk
ICIuMCIKLSAgICAgICAgICAgICAgICBtX2J1ZltpXSA9ICcuJzsKLSAgICAgICAgICAgICAgICBt
X2J1ZltpICsgMV0gPSAnMCc7Ci0KLSAgICAgICAgICAgICAgICAvLyB0aGUgcmVzdWx0aW5nIHN0
cmluZyBpcyBwcm9wZXJseSB0ZXJtaW5hdGVkCi0gICAgICAgICAgICAgICAgYXNzZXJ0KG1fYnVm
W2kgKyAyXSA9PSAnXDAnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLQot
ICAgIC8qIQotICAgIEBicmllZiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2VyaWFs
aXphdGlvbiBmdW5jdGlvbgotCi0gICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHB1
YmxpYyBtZW1iZXIgZnVuY3Rpb24gZHVtcCBhbmQgb3JnYW5pemVzCi0gICAgdGhlIHNlcmlhbGl6
YXRpb24gaW50ZXJuYWxseS4gVGhlIGluZGVudGF0aW9uIGxldmVsIGlzIHByb3BhZ2F0ZWQgYXMK
LSAgICBhZGRpdGlvbmFsIHBhcmFtZXRlci4gSW4gY2FzZSBvZiBhcnJheXMgYW5kIG9iamVjdHMs
IHRoZSBmdW5jdGlvbiBpcwotICAgIGNhbGxlZCByZWN1cnNpdmVseS4gTm90ZSB0aGF0Ci0KLSAg
ICAtIHN0cmluZ3MgYW5kIG9iamVjdCBrZXlzIGFyZSBlc2NhcGVkIHVzaW5nIGBlc2NhcGVfc3Ry
aW5nKClgCi0gICAgLSBpbnRlZ2VyIG51bWJlcnMgYXJlIGNvbnZlcnRlZCBpbXBsaWNpdGx5IHZp
YSBgb3BlcmF0b3I8PGAKLSAgICAtIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXJlIGNvbnZlcnRl
ZCB0byBhIHN0cmluZyB1c2luZyBgIiVnImAgZm9ybWF0Ci0KLSAgICBAcGFyYW1bb3V0XSBvICAg
ICAgICAgICAgICBzdHJlYW0gdG8gd3JpdGUgdG8KLSAgICBAcGFyYW1baW5dIHByZXR0eV9wcmlu
dCAgICB3aGV0aGVyIHRoZSBvdXRwdXQgc2hhbGwgYmUgcHJldHR5LXByaW50ZWQKLSAgICBAcGFy
YW1baW5dIGluZGVudF9zdGVwICAgICB0aGUgaW5kZW50IGxldmVsCi0gICAgQHBhcmFtW2luXSBj
dXJyZW50X2luZGVudCAgdGhlIGN1cnJlbnQgaW5kZW50IGxldmVsIChvbmx5IHVzZWQgaW50ZXJu
YWxseSkKLSAgICAqLwotICAgIHZvaWQgZHVtcChzdGQ6Om9zdHJlYW0mIG8sCi0gICAgICAgICAg
ICAgIGNvbnN0IGJvb2wgcHJldHR5X3ByaW50LAotICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgaW5kZW50X3N0ZXAsCi0gICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBjdXJy
ZW50X2luZGVudCA9IDApIGNvbnN0Ci0gICAgewotICAgICAgICAvLyB2YXJpYWJsZSB0byBob2xk
IGluZGVudGF0aW9uIGZvciByZWN1cnNpdmUgY2FsbHMKLSAgICAgICAgdW5zaWduZWQgaW50IG5l
d19pbmRlbnQgPSBjdXJyZW50X2luZGVudDsKLQotICAgICAgICBzd2l0Y2ggKG1fdHlwZSkKLSAg
ICAgICAgewotICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6Ci0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKG1fdmFsdWUub2JqZWN0LT5lbXB0eSgpKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbyA8PCAie30iOwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbyA8PCAi
eyI7Ci0KLSAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSBpbmRlbnRhdGlvbgotICAgICAgICAg
ICAgICAgIGlmIChwcmV0dHlfcHJpbnQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBuZXdfaW5kZW50ICs9IGluZGVudF9zdGVwOwotICAgICAgICAgICAgICAgICAgICBv
IDw8ICJcbiI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChhdXRv
IGkgPSBtX3ZhbHVlLm9iamVjdC0+Y2JlZ2luKCk7IGkgIT0gbV92YWx1ZS5vYmplY3QtPmNlbmQo
KTsgKytpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0g
bV92YWx1ZS5vYmplY3QtPmNiZWdpbigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvIDw8IChwcmV0dHlfcHJpbnQgPyAiLFxuIiA6ICIsIik7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbyA8PCBzdHJpbmdfdChuZXdf
aW5kZW50LCAnICcpIDw8ICJcIiIKLSAgICAgICAgICAgICAgICAgICAgICA8PCBlc2NhcGVfc3Ry
aW5nKGktPmZpcnN0KSA8PCAiXCI6IgotICAgICAgICAgICAgICAgICAgICAgIDw8IChwcmV0dHlf
cHJpbnQgPyAiICIgOiAiIik7Ci0gICAgICAgICAgICAgICAgICAgIGktPnNlY29uZC5kdW1wKG8s
IHByZXR0eV9wcmludCwgaW5kZW50X3N0ZXAsIG5ld19pbmRlbnQpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIC8vIGRlY3JlYXNlIGluZGVudGF0aW9uCi0gICAgICAgICAg
ICAgICAgaWYgKHByZXR0eV9wcmludCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIG5ld19pbmRlbnQgLT0gaW5kZW50X3N0ZXA7Ci0gICAgICAgICAgICAgICAgICAgIG8g
PDwgIlxuIjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBvIDw8IHN0cmlu
Z190KG5ld19pbmRlbnQsICcgJykgKyAifSI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLmFycmF5LT5lbXB0eSgpKQotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbyA8PCAiW10iOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbyA8
PCAiWyI7Ci0KLSAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSBpbmRlbnRhdGlvbgotICAgICAg
ICAgICAgICAgIGlmIChwcmV0dHlfcHJpbnQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBuZXdfaW5kZW50ICs9IGluZGVudF9zdGVwOwotICAgICAgICAgICAgICAgICAg
ICBvIDw8ICJcbiI7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZm9yIChh
dXRvIGkgPSBtX3ZhbHVlLmFycmF5LT5jYmVnaW4oKTsgaSAhPSBtX3ZhbHVlLmFycmF5LT5jZW5k
KCk7ICsraSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpICE9
IG1fdmFsdWUuYXJyYXktPmNiZWdpbigpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvIDw8IChwcmV0dHlfcHJpbnQgPyAiLFxuIiA6ICIsIik7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbyA8PCBzdHJpbmdfdChuZXdf
aW5kZW50LCAnICcpOwotICAgICAgICAgICAgICAgICAgICBpLT5kdW1wKG8sIHByZXR0eV9wcmlu
dCwgaW5kZW50X3N0ZXAsIG5ld19pbmRlbnQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIC8vIGRlY3JlYXNlIGluZGVudGF0aW9uCi0gICAgICAgICAgICAgICAgaWYgKHBy
ZXR0eV9wcmludCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG5ld19p
bmRlbnQgLT0gaW5kZW50X3N0ZXA7Ci0gICAgICAgICAgICAgICAgICAgIG8gPDwgIlxuIjsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBvIDw8IHN0cmluZ190KG5ld19pbmRl
bnQsICcgJykgPDwgIl0iOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpzdHJpbmc6Ci0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgbyA8PCBzdHJpbmdfdCgiXCIiKSA8PCBlc2NhcGVfc3RyaW5nKCptX3ZhbHVl
LnN0cmluZykgPDwgIlwiIjsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6Ym9vbGVhbjoKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBvIDw8IChtX3ZhbHVlLmJvb2xlYW4gPyAidHJ1ZSIgOiAiZmFsc2UiKTsK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNh
c2UgdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgbyA8PCBudW10b3N0cihtX3ZhbHVlLm51bWJlcl9pbnRlZ2VyKS5jX3N0cigpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FzZSB2YWx1
ZV90OjpudW1iZXJfdW5zaWduZWQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbyA8
PCBudW10b3N0cihtX3ZhbHVlLm51bWJlcl91bnNpZ25lZCkuY19zdHIoKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6
bnVtYmVyX2Zsb2F0OgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG8gPDwgbnVtdG9z
dHIobV92YWx1ZS5udW1iZXJfZmxvYXQpLmNfc3RyKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIHZhbHVlX3Q6OmRpc2NhcmRlZDoK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBvIDw8ICI8ZGlzY2FyZGVkPiI7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjYXNlIHZh
bHVlX3Q6Om51bGw6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbyA8PCAibnVsbCI7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gIHByaXZhdGU6Ci0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIG1lbWJl
ciB2YXJpYWJsZXMgLy8KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgICAvLy8gdGhl
IHR5cGUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudAotICAgIHZhbHVlX3QgbV90eXBlID0gdmFsdWVf
dDo6bnVsbDsKLQotICAgIC8vLyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudAotICAg
IGpzb25fdmFsdWUgbV92YWx1ZSA9IHt9OwotCi0KLSAgcHJpdmF0ZToKLSAgICAvLy8vLy8vLy8v
Ly8vLy8KLSAgICAvLyBpdGVyYXRvcnMgLy8KLSAgICAvLy8vLy8vLy8vLy8vLy8KLQotICAgIC8q
IQotICAgIEBicmllZiBhbiBpdGVyYXRvciBmb3IgcHJpbWl0aXZlIEpTT04gdHlwZXMKLQotICAg
IFRoaXMgY2xhc3MgbW9kZWxzIGFuIGl0ZXJhdG9yIGZvciBwcmltaXRpdmUgSlNPTiB0eXBlcyAo
Ym9vbGVhbiwgbnVtYmVyLAotICAgIHN0cmluZykuIEl0J3Mgb25seSBwdXJwb3NlIGlzIHRvIGFs
bG93IHRoZSBpdGVyYXRvci9jb25zdF9pdGVyYXRvciBjbGFzc2VzCi0gICAgdG8gIml0ZXJhdGUi
IG92ZXIgcHJpbWl0aXZlIHZhbHVlcy4gSW50ZXJuYWxseSwgdGhlIGl0ZXJhdG9yIGlzIG1vZGVs
ZWQgYnkKLSAgICBhIGBkaWZmZXJlbmNlX3R5cGVgIHZhcmlhYmxlLiBWYWx1ZSBiZWdpbl92YWx1
ZSAoYDBgKSBtb2RlbHMgdGhlIGJlZ2luLAotICAgIGVuZF92YWx1ZSAoYDFgKSBtb2RlbHMgcGFz
dCB0aGUgZW5kLgotICAgICovCi0gICAgY2xhc3MgcHJpbWl0aXZlX2l0ZXJhdG9yX3QKLSAgICB7
Ci0gICAgICBwdWJsaWM6Ci0KLSAgICAgICAgZGlmZmVyZW5jZV90eXBlIGdldF92YWx1ZSgpIGNv
bnN0IG5vZXhjZXB0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2l0OwotICAgICAg
ICB9Ci0gICAgICAgIC8vLyBzZXQgaXRlcmF0b3IgdG8gYSBkZWZpbmVkIGJlZ2lubmluZwotICAg
ICAgICB2b2lkIHNldF9iZWdpbigpIG5vZXhjZXB0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1f
aXQgPSBiZWdpbl92YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyBzZXQgaXRlcmF0b3Ig
dG8gYSBkZWZpbmVkIHBhc3QgdGhlIGVuZAotICAgICAgICB2b2lkIHNldF9lbmQoKSBub2V4Y2Vw
dAotICAgICAgICB7Ci0gICAgICAgICAgICBtX2l0ID0gZW5kX3ZhbHVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8vIHJldHVybiB3aGV0aGVyIHRoZSBpdGVyYXRvciBjYW4gYmUgZGVyZWZlcmVu
Y2VkCi0gICAgICAgIGNvbnN0ZXhwciBib29sIGlzX2JlZ2luKCkgY29uc3Qgbm9leGNlcHQKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChtX2l0ID09IGJlZ2luX3ZhbHVlKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vLyByZXR1cm4gd2hldGhlciB0aGUgaXRlcmF0b3IgaXMgYXQgZW5k
Ci0gICAgICAgIGNvbnN0ZXhwciBib29sIGlzX2VuZCgpIGNvbnN0IG5vZXhjZXB0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiAobV9pdCA9PSBlbmRfdmFsdWUpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZnJpZW5kIGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0ocHJpbWl0aXZlX2l0ZXJh
dG9yX3QgbGhzLCBwcmltaXRpdmVfaXRlcmF0b3JfdCByaHMpIG5vZXhjZXB0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBsaHMubV9pdCA9PSByaHMubV9pdDsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZyaWVuZCBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KHByaW1pdGl2ZV9pdGVyYXRv
cl90IGxocywgcHJpbWl0aXZlX2l0ZXJhdG9yX3QgcmhzKSBub2V4Y2VwdAotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gIShsaHMgPT0gcmhzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGZy
aWVuZCBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcjwocHJpbWl0aXZlX2l0ZXJhdG9yX3QgbGhzLCBw
cmltaXRpdmVfaXRlcmF0b3JfdCByaHMpIG5vZXhjZXB0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBsaHMubV9pdCA8IHJocy5tX2l0OwotICAgICAgICB9Ci0KLSAgICAgICAgZnJpZW5k
IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPD0ocHJpbWl0aXZlX2l0ZXJhdG9yX3QgbGhzLCBwcmlt
aXRpdmVfaXRlcmF0b3JfdCByaHMpIG5vZXhjZXB0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBsaHMubV9pdCA8PSByaHMubV9pdDsKLSAgICAgICAgfQotCi0gICAgICAgIGZyaWVuZCBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj4ocHJpbWl0aXZlX2l0ZXJhdG9yX3QgbGhzLCBwcmltaXRp
dmVfaXRlcmF0b3JfdCByaHMpIG5vZXhjZXB0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBsaHMubV9pdCA+IHJocy5tX2l0OwotICAgICAgICB9Ci0KLSAgICAgICAgZnJpZW5kIGNvbnN0
ZXhwciBib29sIG9wZXJhdG9yPj0ocHJpbWl0aXZlX2l0ZXJhdG9yX3QgbGhzLCBwcmltaXRpdmVf
aXRlcmF0b3JfdCByaHMpIG5vZXhjZXB0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBs
aHMubV9pdCA+PSByaHMubV9pdDsKLSAgICAgICAgfQotCi0gICAgICAgIHByaW1pdGl2ZV9pdGVy
YXRvcl90IG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgaSkKLSAgICAgICAgewotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSAqdGhpczsKLSAgICAgICAgICAgIHJlc3VsdCArPSBpOwotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIGZyaWVuZCBjb25zdGV4
cHIgZGlmZmVyZW5jZV90eXBlIG9wZXJhdG9yLShwcmltaXRpdmVfaXRlcmF0b3JfdCBsaHMsIHBy
aW1pdGl2ZV9pdGVyYXRvcl90IHJocykgbm9leGNlcHQKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGxocy5tX2l0IC0gcmhzLm1faXQ7Ci0gICAgICAgIH0KLQotICAgICAgICBmcmllbmQg
c3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIHByaW1pdGl2ZV9pdGVy
YXRvcl90IGl0KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gb3MgPDwgaXQubV9pdDsK
LSAgICAgICAgfQotCi0gICAgICAgIHByaW1pdGl2ZV9pdGVyYXRvcl90JiBvcGVyYXRvcisrKCkK
LSAgICAgICAgewotICAgICAgICAgICAgKyttX2l0OwotICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwotICAgICAgICB9Ci0KLSAgICAgICAgcHJpbWl0aXZlX2l0ZXJhdG9yX3Qgb3BlcmF0b3IrKyhp
bnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gKnRoaXM7Ci0gICAgICAg
ICAgICBtX2l0Kys7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAg
ICAgICAgcHJpbWl0aXZlX2l0ZXJhdG9yX3QmIG9wZXJhdG9yLS0oKQotICAgICAgICB7Ci0gICAg
ICAgICAgICAtLW1faXQ7Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLQot
ICAgICAgICBwcmltaXRpdmVfaXRlcmF0b3JfdCBvcGVyYXRvci0tKGludCkKLSAgICAgICAgewot
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSAqdGhpczsKLSAgICAgICAgICAgIG1faXQtLTsKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICBwcmltaXRpdmVf
aXRlcmF0b3JfdCYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgbikKLSAgICAgICAgewotICAg
ICAgICAgICAgbV9pdCArPSBuOwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9
Ci0KLSAgICAgICAgcHJpbWl0aXZlX2l0ZXJhdG9yX3QmIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90
eXBlIG4pCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1faXQgLT0gbjsKLSAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKLSAgICAgICAgfQotCi0gICAgICBwcml2YXRlOgotICAgICAgICBzdGF0aWMg
Y29uc3RleHByIGRpZmZlcmVuY2VfdHlwZSBiZWdpbl92YWx1ZSA9IDA7Ci0gICAgICAgIHN0YXRp
YyBjb25zdGV4cHIgZGlmZmVyZW5jZV90eXBlIGVuZF92YWx1ZSA9IGJlZ2luX3ZhbHVlICsgMTsK
LQotICAgICAgICAvLy8gaXRlcmF0b3IgYXMgc2lnbmVkIGludGVnZXIgdHlwZQotICAgICAgICBk
aWZmZXJlbmNlX3R5cGUgbV9pdCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8c3RkOjpwdHJkaWZmX3Q+
OjpkZW5vcm1fbWluKCk7Ci0gICAgfTsKLQotICAgIC8qIQotICAgIEBicmllZiBhbiBpdGVyYXRv
ciB2YWx1ZQotCi0gICAgQG5vdGUgVGhpcyBzdHJ1Y3R1cmUgY291bGQgZWFzaWx5IGJlIGEgdW5p
b24sIGJ1dCBNU1ZDIGN1cnJlbnRseSBkb2VzIG5vdAotICAgIGFsbG93IHVuaW9ucyBtZW1iZXJz
IHdpdGggY29tcGxleCBjb25zdHJ1Y3RvcnMsIHNlZQotICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9u
bG9obWFubi9qc29uL3B1bGwvMTA1LgotICAgICovCi0gICAgc3RydWN0IGludGVybmFsX2l0ZXJh
dG9yCi0gICAgewotICAgICAgICAvLy8gaXRlcmF0b3IgZm9yIEpTT04gb2JqZWN0cwotICAgICAg
ICB0eXBlbmFtZSBvYmplY3RfdDo6aXRlcmF0b3Igb2JqZWN0X2l0ZXJhdG9yOwotICAgICAgICAv
Ly8gaXRlcmF0b3IgZm9yIEpTT04gYXJyYXlzCi0gICAgICAgIHR5cGVuYW1lIGFycmF5X3Q6Oml0
ZXJhdG9yIGFycmF5X2l0ZXJhdG9yOwotICAgICAgICAvLy8gZ2VuZXJpYyBpdGVyYXRvciBmb3Ig
YWxsIG90aGVyIHR5cGVzCi0gICAgICAgIHByaW1pdGl2ZV9pdGVyYXRvcl90IHByaW1pdGl2ZV9p
dGVyYXRvcjsKLQotICAgICAgICAvLy8gY3JlYXRlIGFuIHVuaW5pdGlhbGl6ZWQgaW50ZXJuYWxf
aXRlcmF0b3IKLSAgICAgICAgaW50ZXJuYWxfaXRlcmF0b3IoKSBub2V4Y2VwdAotICAgICAgICAg
ICAgOiBvYmplY3RfaXRlcmF0b3IoKSwgYXJyYXlfaXRlcmF0b3IoKSwgcHJpbWl0aXZlX2l0ZXJh
dG9yKCkKLSAgICAgICAge30KLSAgICB9OwotCi0gICAgLy8vIHByb3h5IGNsYXNzIGZvciB0aGUg
aXRlcmF0b3Jfd3JhcHBlciBmdW5jdGlvbnMKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRv
clR5cGU+Ci0gICAgY2xhc3MgaXRlcmF0aW9uX3Byb3h5Ci0gICAgewotICAgICAgcHJpdmF0ZToK
LSAgICAgICAgLy8vIGhlbHBlciBjbGFzcyBmb3IgaXRlcmF0aW9uCi0gICAgICAgIGNsYXNzIGl0
ZXJhdGlvbl9wcm94eV9pbnRlcm5hbAotICAgICAgICB7Ci0gICAgICAgICAgcHJpdmF0ZToKLSAg
ICAgICAgICAgIC8vLyB0aGUgaXRlcmF0b3IKLSAgICAgICAgICAgIEl0ZXJhdG9yVHlwZSBhbmNo
b3I7Ci0gICAgICAgICAgICAvLy8gYW4gaW5kZXggZm9yIGFycmF5cyAodXNlZCB0byBjcmVhdGUg
a2V5IG5hbWVzKQotICAgICAgICAgICAgc2l6ZV90IGFycmF5X2luZGV4ID0gMDsKLQotICAgICAg
ICAgIHB1YmxpYzoKLSAgICAgICAgICAgIGV4cGxpY2l0IGl0ZXJhdGlvbl9wcm94eV9pbnRlcm5h
bChJdGVyYXRvclR5cGUgaXQpIG5vZXhjZXB0Ci0gICAgICAgICAgICAgICAgOiBhbmNob3IoaXQp
Ci0gICAgICAgICAgICB7fQotCi0gICAgICAgICAgICAvLy8gZGVyZWZlcmVuY2Ugb3BlcmF0b3Ig
KG5lZWRlZCBmb3IgcmFuZ2UtYmFzZWQgZm9yKQotICAgICAgICAgICAgaXRlcmF0aW9uX3Byb3h5
X2ludGVybmFsJiBvcGVyYXRvciooKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8vIGluY3JlbWVudCBv
cGVyYXRvciAobmVlZGVkIGZvciByYW5nZS1iYXNlZCBmb3IpCi0gICAgICAgICAgICBpdGVyYXRp
b25fcHJveHlfaW50ZXJuYWwmIG9wZXJhdG9yKysoKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICsrYW5jaG9yOwotICAgICAgICAgICAgICAgICsrYXJyYXlfaW5kZXg7Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8v
LyBpbmVxdWFsaXR5IG9wZXJhdG9yIChuZWVkZWQgZm9yIHJhbmdlLWJhc2VkIGZvcikKLSAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3IhPSAoY29uc3QgaXRlcmF0aW9uX3Byb3h5X2ludGVybmFsJiBv
KSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBhbmNob3IgIT0g
by5hbmNob3I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vLyByZXR1cm4ga2V5IG9m
IHRoZSBpdGVyYXRvcgotICAgICAgICAgICAgdHlwZW5hbWUgYmFzaWNfanNvbjo6c3RyaW5nX3Qg
a2V5KCkgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQoYW5jaG9y
Lm1fb2JqZWN0ICE9IG51bGxwdHIpOwotCi0gICAgICAgICAgICAgICAgc3dpdGNoIChhbmNob3Iu
bV9vYmplY3QtPnR5cGUoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIHVzZSBpbnRlZ2VyIGFycmF5IGluZGV4IGFzIGtleQotICAgICAgICAgICAgICAgICAgICBj
YXNlIHZhbHVlX3Q6OmFycmF5OgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjp0b19zdHJpbmcoYXJyYXlfaW5kZXgpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gdXNlIGtleSBmcm9tIHRoZSBv
YmplY3QKLSAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6Ci0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbmNob3Iua2V5
KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyB1c2Ug
YW4gZW1wdHkga2V5IGZvciBhbGwgcHJpbWl0aXZlIHR5cGVzCi0gICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiAiIjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8vIHJldHVybiB2YWx1ZSBvZiB0aGUgaXRlcmF0
b3IKLSAgICAgICAgICAgIHR5cGVuYW1lIEl0ZXJhdG9yVHlwZTo6cmVmZXJlbmNlIHZhbHVlKCkg
Y29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYW5jaG9yLnZhbHVl
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8vIHRoZSBjb250YWlu
ZXIgdG8gaXRlcmF0ZQotICAgICAgICB0eXBlbmFtZSBJdGVyYXRvclR5cGU6OnJlZmVyZW5jZSBj
b250YWluZXI7Ci0KLSAgICAgIHB1YmxpYzoKLSAgICAgICAgLy8vIGNvbnN0cnVjdCBpdGVyYXRp
b24gcHJveHkgZnJvbSBhIGNvbnRhaW5lcgotICAgICAgICBleHBsaWNpdCBpdGVyYXRpb25fcHJv
eHkodHlwZW5hbWUgSXRlcmF0b3JUeXBlOjpyZWZlcmVuY2UgY29udCkKLSAgICAgICAgICAgIDog
Y29udGFpbmVyKGNvbnQpCi0gICAgICAgIHt9Ci0KLSAgICAgICAgLy8vIHJldHVybiBpdGVyYXRv
ciBiZWdpbiAobmVlZGVkIGZvciByYW5nZS1iYXNlZCBmb3IpCi0gICAgICAgIGl0ZXJhdGlvbl9w
cm94eV9pbnRlcm5hbCBiZWdpbigpIG5vZXhjZXB0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBpdGVyYXRpb25fcHJveHlfaW50ZXJuYWwoY29udGFpbmVyLmJlZ2luKCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8vIHJldHVybiBpdGVyYXRvciBlbmQgKG5lZWRlZCBmb3IgcmFuZ2Ut
YmFzZWQgZm9yKQotICAgICAgICBpdGVyYXRpb25fcHJveHlfaW50ZXJuYWwgZW5kKCkgbm9leGNl
cHQKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdGlvbl9wcm94eV9pbnRlcm5h
bChjb250YWluZXIuZW5kKCkpOwotICAgICAgICB9Ci0gICAgfTsKLQotICBwdWJsaWM6Ci0gICAg
LyohCi0gICAgQGJyaWVmIGEgdGVtcGxhdGUgZm9yIGEgcmFuZG9tIGFjY2VzcyBpdGVyYXRvciBm
b3IgdGhlIEByZWYgYmFzaWNfanNvbiBjbGFzcwotCi0gICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRz
IGEgYm90aCBpdGVyYXRvcnMgKGl0ZXJhdG9yIGFuZCBjb25zdF9pdGVyYXRvcikgZm9yIHRoZQot
ICAgIEByZWYgYmFzaWNfanNvbiBjbGFzcy4KLQotICAgIEBub3RlIEFuIGl0ZXJhdG9yIGlzIGNh
bGxlZCAqaW5pdGlhbGl6ZWQqIHdoZW4gYSBwb2ludGVyIHRvIGEgSlNPTiB2YWx1ZQotICAgICAg
ICAgIGhhcyBiZWVuIHNldCAoZS5nLiwgYnkgYSBjb25zdHJ1Y3RvciBvciBhIGNvcHkgYXNzaWdu
bWVudCkuIElmIHRoZQotICAgICAgICAgIGl0ZXJhdG9yIGlzIGRlZmF1bHQtY29uc3RydWN0ZWQs
IGl0IGlzICp1bmluaXRpYWxpemVkKiBhbmQgbW9zdAotICAgICAgICAgIG1ldGhvZHMgYXJlIHVu
ZGVmaW5lZC4gKipUaGUgbGlicmFyeSB1c2VzIGFzc2VydGlvbnMgdG8gZGV0ZWN0IGNhbGxzCi0g
ICAgICAgICAgb24gdW5pbml0aWFsaXplZCBpdGVyYXRvcnMuKioKLQotICAgIEByZXF1aXJlbWVu
dCBUaGUgY2xhc3Mgc2F0aXNmaWVzIHRoZSBmb2xsb3dpbmcgY29uY2VwdCByZXF1aXJlbWVudHM6
Ci0gICAgLSBbUmFuZG9tQWNjZXNzSXRlcmF0b3JdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29t
L3cvY3BwL2NvbmNlcHQvUmFuZG9tQWNjZXNzSXRlcmF0b3IpOgotICAgICAgVGhlIGl0ZXJhdG9y
IHRoYXQgY2FuIGJlIG1vdmVkIHRvIHBvaW50IChmb3J3YXJkIGFuZCBiYWNrd2FyZCkgdG8gYW55
Ci0gICAgICBlbGVtZW50IGluIGNvbnN0YW50IHRpbWUuCi0KLSAgICBAc2luY2UgdmVyc2lvbiAx
LjAuMCwgc2ltcGxpZmllZCBpbiB2ZXJzaW9uIDIuMC45Ci0gICAgKi8KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgotICAgIGNsYXNzIGl0ZXJfaW1wbCA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0
ZDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIFU+Ci0gICAgewotICAgICAgICAvLy8gYWxs
b3cgYmFzaWNfanNvbiB0byBhY2Nlc3MgcHJpdmF0ZSBtZW1iZXJzCi0gICAgICAgIGZyaWVuZCBj
bGFzcyBiYXNpY19qc29uOwotCi0gICAgICAgIC8vIG1ha2Ugc3VyZSBVIGlzIGJhc2ljX2pzb24g
b3IgY29uc3QgYmFzaWNfanNvbgotICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxV
LCBiYXNpY19qc29uPjo6dmFsdWUKLSAgICAgICAgICAgICAgICAgICAgICBvciBzdGQ6OmlzX3Nh
bWU8VSwgY29uc3QgYmFzaWNfanNvbj46OnZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICJp
dGVyX2ltcGwgb25seSBhY2NlcHRzIChjb25zdCkgYmFzaWNfanNvbiIpOwotCi0gICAgICBwdWJs
aWM6Ci0gICAgICAgIC8vLyB0aGUgdHlwZSBvZiB0aGUgdmFsdWVzIHdoZW4gdGhlIGl0ZXJhdG9y
IGlzIGRlcmVmZXJlbmNlZAotICAgICAgICB1c2luZyB2YWx1ZV90eXBlID0gdHlwZW5hbWUgYmFz
aWNfanNvbjo6dmFsdWVfdHlwZTsKLSAgICAgICAgLy8vIGEgdHlwZSB0byByZXByZXNlbnQgZGlm
ZmVyZW5jZXMgYmV0d2VlbiBpdGVyYXRvcnMKLSAgICAgICAgdXNpbmcgZGlmZmVyZW5jZV90eXBl
ID0gdHlwZW5hbWUgYmFzaWNfanNvbjo6ZGlmZmVyZW5jZV90eXBlOwotICAgICAgICAvLy8gZGVm
aW5lcyBhIHBvaW50ZXIgdG8gdGhlIHR5cGUgaXRlcmF0ZWQgb3ZlciAodmFsdWVfdHlwZSkKLSAg
ICAgICAgdXNpbmcgcG9pbnRlciA9IHR5cGVuYW1lIHN0ZDo6Y29uZGl0aW9uYWw8c3RkOjppc19j
b25zdDxVPjo6dmFsdWUsCi0gICAgICAgICAgICAgIHR5cGVuYW1lIGJhc2ljX2pzb246OmNvbnN0
X3BvaW50ZXIsCi0gICAgICAgICAgICAgIHR5cGVuYW1lIGJhc2ljX2pzb246OnBvaW50ZXI+Ojp0
eXBlOwotICAgICAgICAvLy8gZGVmaW5lcyBhIHJlZmVyZW5jZSB0byB0aGUgdHlwZSBpdGVyYXRl
ZCBvdmVyICh2YWx1ZV90eXBlKQotICAgICAgICB1c2luZyByZWZlcmVuY2UgPSB0eXBlbmFtZSBz
dGQ6OmNvbmRpdGlvbmFsPHN0ZDo6aXNfY29uc3Q8VT46OnZhbHVlLAotICAgICAgICAgICAgICB0
eXBlbmFtZSBiYXNpY19qc29uOjpjb25zdF9yZWZlcmVuY2UsCi0gICAgICAgICAgICAgIHR5cGVu
YW1lIGJhc2ljX2pzb246OnJlZmVyZW5jZT46OnR5cGU7Ci0gICAgICAgIC8vLyB0aGUgY2F0ZWdv
cnkgb2YgdGhlIGl0ZXJhdG9yCi0gICAgICAgIHVzaW5nIGl0ZXJhdG9yX2NhdGVnb3J5ID0gc3Rk
OjpiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZzsKLQotICAgICAgICAvLy8gZGVmYXVsdCBjb25z
dHJ1Y3RvcgotICAgICAgICBpdGVyX2ltcGwoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgLyohCi0g
ICAgICAgIEBicmllZiBjb25zdHJ1Y3RvciBmb3IgYSBnaXZlbiBKU09OIGluc3RhbmNlCi0gICAg
ICAgIEBwYXJhbVtpbl0gb2JqZWN0ICBwb2ludGVyIHRvIGEgSlNPTiBvYmplY3QgZm9yIHRoaXMg
aXRlcmF0b3IKLSAgICAgICAgQHByZSBvYmplY3QgIT0gbnVsbHB0cgotICAgICAgICBAcG9zdCBU
aGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgot
ICAgICAgICAqLwotICAgICAgICBleHBsaWNpdCBpdGVyX2ltcGwocG9pbnRlciBvYmplY3QpIG5v
ZXhjZXB0Ci0gICAgICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKLSAgICAgICAgewotICAgICAg
ICAgICAgYXNzZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIpOwotCi0gICAgICAgICAgICBzd2l0Y2gg
KG1fb2JqZWN0LT5tX3R5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBi
YXNpY19qc29uOjp2YWx1ZV90OjpvYmplY3Q6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBtX2l0Lm9iamVjdF9pdGVyYXRvciA9IHR5cGVuYW1lIG9iamVjdF90OjppdGVy
YXRvcigpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6OmFycmF5OgotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pdC5hcnJheV9pdGVyYXRvciA9IHR5
cGVuYW1lIGFycmF5X3Q6Oml0ZXJhdG9yKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBtX2l0LnByaW1pdGl2ZV9pdGVyYXRvciA9IHBy
aW1pdGl2ZV9pdGVyYXRvcl90KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAg
ICAgIFVzZSBvcGVyYXRvciBgY29uc3RfaXRlcmF0b3JgIGluc3RlYWQgb2YgYGNvbnN0X2l0ZXJh
dG9yKGNvbnN0IGl0ZXJhdG9yJgotICAgICAgICBvdGhlcikgbm9leGNlcHRgIHRvIGF2b2lkIHR3
byBjbGFzcyBkZWZpbml0aW9ucyBmb3IgQHJlZiBpdGVyYXRvciBhbmQKLSAgICAgICAgQHJlZiBj
b25zdF9pdGVyYXRvci4KLQotICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGlm
IHRoaXMgY2xhc3MgaXMgYW4gQHJlZiBpdGVyYXRvci4gSWYgdGhpcwotICAgICAgICBjbGFzcyBp
cyBhIEByZWYgY29uc3RfaXRlcmF0b3IgdGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkLgotICAg
ICAgICAqLwotICAgICAgICBvcGVyYXRvciBjb25zdF9pdGVyYXRvcigpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGNvbnN0X2l0ZXJhdG9yIHJldDsKLQotICAgICAgICAgICAgaWYgKG1f
b2JqZWN0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldC5tX29iamVjdCA9IG1f
b2JqZWN0OwotICAgICAgICAgICAgICAgIHJldC5tX2l0ID0gbV9pdDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgcmV0dXJuIHJldDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIQotICAg
ICAgICBAYnJpZWYgY29weSBjb25zdHJ1Y3RvcgotICAgICAgICBAcGFyYW1baW5dIG90aGVyICBp
dGVyYXRvciB0byBjb3B5IGZyb20KLSAgICAgICAgQG5vdGUgSXQgaXMgbm90IGNoZWNrZWQgd2hl
dGhlciBAYSBvdGhlciBpcyBpbml0aWFsaXplZC4KLSAgICAgICAgKi8KLSAgICAgICAgaXRlcl9p
bXBsKGNvbnN0IGl0ZXJfaW1wbCYgb3RoZXIpIG5vZXhjZXB0Ci0gICAgICAgICAgICA6IG1fb2Jq
ZWN0KG90aGVyLm1fb2JqZWN0KSwgbV9pdChvdGhlci5tX2l0KQotICAgICAgICB7fQotCi0gICAg
ICAgIC8qIQotICAgICAgICBAYnJpZWYgY29weSBhc3NpZ25tZW50Ci0gICAgICAgIEBwYXJhbVtp
bixvdXRdIG90aGVyICBpdGVyYXRvciB0byBjb3B5IGZyb20KLSAgICAgICAgQG5vdGUgSXQgaXMg
bm90IGNoZWNrZWQgd2hldGhlciBAYSBvdGhlciBpcyBpbml0aWFsaXplZC4KLSAgICAgICAgKi8K
LSAgICAgICAgaXRlcl9pbXBsJiBvcGVyYXRvcj0oaXRlcl9pbXBsIG90aGVyKSBub2V4Y2VwdCgK
LSAgICAgICAgICAgIHN0ZDo6aXNfbm90aHJvd19tb3ZlX2NvbnN0cnVjdGlibGU8cG9pbnRlcj46
OnZhbHVlIGFuZAotICAgICAgICAgICAgc3RkOjppc19ub3Rocm93X21vdmVfYXNzaWduYWJsZTxw
b2ludGVyPjo6dmFsdWUgYW5kCi0gICAgICAgICAgICBzdGQ6OmlzX25vdGhyb3dfbW92ZV9jb25z
dHJ1Y3RpYmxlPGludGVybmFsX2l0ZXJhdG9yPjo6dmFsdWUgYW5kCi0gICAgICAgICAgICBzdGQ6
OmlzX25vdGhyb3dfbW92ZV9hc3NpZ25hYmxlPGludGVybmFsX2l0ZXJhdG9yPjo6dmFsdWUKLSAg
ICAgICAgKQotICAgICAgICB7Ci0gICAgICAgICAgICBzdGQ6OnN3YXAobV9vYmplY3QsIG90aGVy
Lm1fb2JqZWN0KTsKLSAgICAgICAgICAgIHN0ZDo6c3dhcChtX2l0LCBvdGhlci5tX2l0KTsKLSAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotCi0gICAgICBwcml2YXRlOgotICAg
ICAgICAvKiEKLSAgICAgICAgQGJyaWVmIHNldCB0aGUgaXRlcmF0b3IgdG8gdGhlIGZpcnN0IHZh
bHVlCi0gICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29i
amVjdCAhPSBudWxscHRyYC4KLSAgICAgICAgKi8KLSAgICAgICAgdm9pZCBzZXRfYmVnaW4oKSBu
b2V4Y2VwdAotICAgICAgICB7Ci0gICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0
cik7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om9iamVjdDoKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1faXQub2JqZWN0X2l0ZXJhdG9y
ID0gbV9vYmplY3QtPm1fdmFsdWUub2JqZWN0LT5iZWdpbigpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXNlIGJhc2lj
X2pzb246OnZhbHVlX3Q6OmFycmF5OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9pdC5hcnJheV9pdGVyYXRvciA9IG1fb2JqZWN0LT5tX3ZhbHVlLmFycmF5LT5iZWdp
bigpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om51bGw6Ci0gICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBzZXQgdG8gZW5kIHNvIGJlZ2luKCk9PWVu
ZCgpIGlzIHRydWU6IG51bGwgaXMgZW1wdHkKLSAgICAgICAgICAgICAgICAgICAgbV9pdC5wcmlt
aXRpdmVfaXRlcmF0b3Iuc2V0X2VuZCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pdC5wcmltaXRpdmVfaXRlcmF0b3Iuc2V0X2Jl
Z2luKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIQotICAgICAgICBAYnJpZWYgc2V0
IHRoZSBpdGVyYXRvciBwYXN0IHRoZSBsYXN0IHZhbHVlCi0gICAgICAgIEBwcmUgVGhlIGl0ZXJh
dG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KLSAgICAgICAg
Ki8KLSAgICAgICAgdm9pZCBzZXRfZW5kKCkgbm9leGNlcHQKLSAgICAgICAgewotICAgICAgICAg
ICAgYXNzZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG1f
b2JqZWN0LT5tX3R5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBiYXNp
Y19qc29uOjp2YWx1ZV90OjpvYmplY3Q6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBtX2l0Lm9iamVjdF9pdGVyYXRvciA9IG1fb2JqZWN0LT5tX3ZhbHVlLm9iamVjdC0+
ZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6YXJyYXk6Ci0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtX2l0LmFycmF5X2l0ZXJhdG9yID0gbV9v
YmplY3QtPm1fdmFsdWUuYXJyYXktPmVuZCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbV9pdC5wcmltaXRpdmVfaXRlcmF0b3Iuc2V0
X2VuZCgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgcHVibGljOgotICAgICAgICAvKiEKLSAg
ICAgICAgQGJyaWVmIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgdmFsdWUgcG9pbnRlZCB0byBi
eSB0aGUgaXRlcmF0b3IKLSAgICAgICAgQHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7
IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgotICAgICAgICAqLwotICAgICAgICByZWZlcmVu
Y2Ugb3BlcmF0b3IqKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0KG1fb2Jq
ZWN0ICE9IG51bGxwdHIpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG1fb2JqZWN0LT5tX3R5cGUp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90
OjpvYmplY3Q6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQo
bV9pdC5vYmplY3RfaXRlcmF0b3IgIT0gbV9vYmplY3QtPm1fdmFsdWUub2JqZWN0LT5lbmQoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2l0Lm9iamVjdF9pdGVyYXRvci0+c2Vjb25k
OwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6
dmFsdWVfdDo6YXJyYXk6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBh
c3NlcnQobV9pdC5hcnJheV9pdGVyYXRvciAhPSBtX29iamVjdC0+bV92YWx1ZS5hcnJheS0+ZW5k
KCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKm1faXQuYXJyYXlfaXRlcmF0b3I7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1
ZV90OjpudWxsOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgSlNPTl9U
SFJPVyhzdGQ6Om91dF9vZl9yYW5nZSgiY2Fubm90IGdldCB2YWx1ZSIpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yLmlzX2JlZ2luKCkp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAq
bV9vYmplY3Q7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBK
U09OX1RIUk9XKHN0ZDo6b3V0X29mX3JhbmdlKCJjYW5ub3QgZ2V0IHZhbHVlIikpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIQotICAg
ICAgICBAYnJpZWYgZGVyZWZlcmVuY2UgdGhlIGl0ZXJhdG9yCi0gICAgICAgIEBwcmUgVGhlIGl0
ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KLSAgICAg
ICAgKi8KLSAgICAgICAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgYXNzZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIpOwotCi0gICAgICAgICAgICBzd2l0
Y2ggKG1fb2JqZWN0LT5tX3R5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBiYXNpY19qc29uOjp2YWx1ZV90OjpvYmplY3Q6Ci0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBhc3NlcnQobV9pdC5vYmplY3RfaXRlcmF0b3IgIT0gbV9vYmplY3QtPm1f
dmFsdWUub2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAmKG1faXQu
b2JqZWN0X2l0ZXJhdG9yLT5zZWNvbmQpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6YXJyYXk6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQobV9pdC5hcnJheV9pdGVyYXRvciAhPSBtX29i
amVjdC0+bV92YWx1ZS5hcnJheS0+ZW5kKCkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
JiptX2l0LmFycmF5X2l0ZXJhdG9yOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAo
bV9pdC5wcmltaXRpdmVfaXRlcmF0b3IuaXNfYmVnaW4oKSkKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fb2JqZWN0OwotICAgICAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6Om91dF9vZl9y
YW5nZSgiY2Fubm90IGdldCB2YWx1ZSIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKiEKLSAgICAgICAgQGJyaWVmIHBvc3QtaW5jcmVt
ZW50IChpdCsrKQotICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5l
LiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCi0gICAgICAgICovCi0gICAgICAgIGl0ZXJfaW1wbCBv
cGVyYXRvcisrKGludCkKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byByZXN1bHQgPSAqdGhp
czsKLSAgICAgICAgICAgICsrKCp0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvKiEKLSAgICAgICAgQGJyaWVmIHByZS1pbmNyZW1lbnQgKCsr
aXQpCi0gICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29i
amVjdCAhPSBudWxscHRyYC4KLSAgICAgICAgKi8KLSAgICAgICAgaXRlcl9pbXBsJiBvcGVyYXRv
cisrKCkKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIp
OwotCi0gICAgICAgICAgICBzd2l0Y2ggKG1fb2JqZWN0LT5tX3R5cGUpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjpvYmplY3Q6Ci0gICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBzdGQ6OmFkdmFuY2UobV9pdC5vYmpl
Y3RfaXRlcmF0b3IsIDEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6OmFycmF5
OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgc3RkOjphZHZhbmNlKG1f
aXQuYXJyYXlfaXRlcmF0b3IsIDEpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgKyttX2l0LnByaW1pdGl2ZV9pdGVyYXRvcjsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiEKLSAg
ICAgICAgQGJyaWVmIHBvc3QtZGVjcmVtZW50IChpdC0tKQotICAgICAgICBAcHJlIFRoZSBpdGVy
YXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCi0gICAgICAg
ICovCi0gICAgICAgIGl0ZXJfaW1wbCBvcGVyYXRvci0tKGludCkKLSAgICAgICAgewotICAgICAg
ICAgICAgYXV0byByZXN1bHQgPSAqdGhpczsKLSAgICAgICAgICAgIC0tKCp0aGlzKTsKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiEKLSAgICAgICAg
QGJyaWVmIHByZS1kZWNyZW1lbnQgKC0taXQpCi0gICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlz
IGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KLSAgICAgICAgKi8KLSAg
ICAgICAgaXRlcl9pbXBsJiBvcGVyYXRvci0tKCkKLSAgICAgICAgewotICAgICAgICAgICAgYXNz
ZXJ0KG1fb2JqZWN0ICE9IG51bGxwdHIpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKG1fb2JqZWN0
LT5tX3R5cGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29u
Ojp2YWx1ZV90OjpvYmplY3Q6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBzdGQ6OmFkdmFuY2UobV9pdC5vYmplY3RfaXRlcmF0b3IsIC0xKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FzZSBi
YXNpY19qc29uOjp2YWx1ZV90OjphcnJheToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN0ZDo6YWR2YW5jZShtX2l0LmFycmF5X2l0ZXJhdG9yLCAtMSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAtLW1faXQu
cHJpbWl0aXZlX2l0ZXJhdG9yOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8qIQotICAgICAgICBAYnJpZWYgIGNvbXBhcmlzb246IGVxdWFs
Ci0gICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVj
dCAhPSBudWxscHRyYC4KLSAgICAgICAgKi8KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJfaW1wbCYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGlmIG9i
amVjdHMgYXJlIG5vdCB0aGUgc2FtZSwgdGhlIGNvbXBhcmlzb24gaXMgdW5kZWZpbmVkCi0gICAg
ICAgICAgICBpZiAobV9vYmplY3QgIT0gb3RoZXIubV9vYmplY3QpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigiY2Fubm90IGNvbXBh
cmUgaXRlcmF0b3JzIG9mIGRpZmZlcmVudCBjb250YWluZXJzIikpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7Ci0KLSAgICAgICAgICAg
IHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om9iamVjdDoKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiAobV9pdC5vYmplY3RfaXRlcmF0b3IgPT0gb3RoZXIu
bV9pdC5vYmplY3RfaXRlcmF0b3IpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6YXJyYXk6Ci0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1faXQuYXJyYXlfaXRlcmF0b3IgPT0gb3RoZXIu
bV9pdC5hcnJheV9pdGVyYXRvcik7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVy
biAobV9pdC5wcmltaXRpdmVfaXRlcmF0b3IgPT0gb3RoZXIubV9pdC5wcmltaXRpdmVfaXRlcmF0
b3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIC8qIQotICAgICAgICBAYnJpZWYgIGNvbXBhcmlzb246IG5vdCBlcXVhbAotICAgICAgICBA
cHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0
cmAuCi0gICAgICAgICovCi0gICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyX2ltcGwm
IG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbm90IG9wZXJhdG9y
PT0ob3RoZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyohCi0gICAgICAgIEBicmllZiAgY29t
cGFyaXNvbjogc21hbGxlcgotICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXpl
ZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCi0gICAgICAgICovCi0gICAgICAgIGJvb2wg
b3BlcmF0b3I8KGNvbnN0IGl0ZXJfaW1wbCYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIGlmIG9iamVjdHMgYXJlIG5vdCB0aGUgc2FtZSwgdGhlIGNvbXBhcmlzb24gaXMg
dW5kZWZpbmVkCi0gICAgICAgICAgICBpZiAobV9vYmplY3QgIT0gb3RoZXIubV9vYmplY3QpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJv
cigiY2Fubm90IGNvbXBhcmUgaXRlcmF0b3JzIG9mIGRpZmZlcmVudCBjb250YWluZXJzIikpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7
Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobV9vYmplY3QtPm1fdHlwZSkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om9iamVjdDoKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjpkb21haW5f
ZXJyb3IoImNhbm5vdCBjb21wYXJlIG9yZGVyIG9mIG9iamVjdCBpdGVyYXRvcnMiKSk7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90
OjphcnJheToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAo
bV9pdC5hcnJheV9pdGVyYXRvciA8IG90aGVyLm1faXQuYXJyYXlfaXRlcmF0b3IpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yIDwg
b3RoZXIubV9pdC5wcmltaXRpdmVfaXRlcmF0b3IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIQotICAgICAgICBAYnJpZWYgIGNvbXBh
cmlzb246IGxlc3MgdGhhbiBvciBlcXVhbAotICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBp
bml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCi0gICAgICAgICovCi0gICAg
ICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBpdGVyX2ltcGwmIG90aGVyKSBjb25zdAotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gbm90IG90aGVyLm9wZXJhdG9yIDwgKCp0aGlzKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8qIQotICAgICAgICBAYnJpZWYgIGNvbXBhcmlzb246IGdyZWF0
ZXIgdGhhbgotICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXplZDsgaS5lLiBg
bV9vYmplY3QgIT0gbnVsbHB0cmAuCi0gICAgICAgICovCi0gICAgICAgIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IGl0ZXJfaW1wbCYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBub3Qgb3BlcmF0b3I8PShvdGhlcik7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiEKLSAg
ICAgICAgQGJyaWVmICBjb21wYXJpc29uOiBncmVhdGVyIHRoYW4gb3IgZXF1YWwKLSAgICAgICAg
QHByZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxw
dHJgLgotICAgICAgICAqLwotICAgICAgICBib29sIG9wZXJhdG9yPj0oY29uc3QgaXRlcl9pbXBs
JiBvdGhlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG5vdCBvcGVyYXRv
cjwob3RoZXIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyohCi0gICAgICAgIEBicmllZiAgYWRk
IHRvIGl0ZXJhdG9yCi0gICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBp
LmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KLSAgICAgICAgKi8KLSAgICAgICAgaXRlcl9pbXBs
JiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBh
c3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAobV9vYmpl
Y3QtPm1fdHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBjYXNlIGJhc2ljX2pz
b246OnZhbHVlX3Q6Om9iamVjdDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIEpTT05fVEhST1coc3RkOjpkb21haW5fZXJyb3IoImNhbm5vdCB1c2Ugb2Zmc2V0cyB3aXRo
IG9iamVjdCBpdGVyYXRvcnMiKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgY2FzZSBiYXNpY19qc29uOjp2YWx1ZV90OjphcnJheToKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0ZDo6YWR2YW5jZShtX2l0LmFycmF5X2l0ZXJhdG9yLCBpKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
IG1faXQucHJpbWl0aXZlX2l0ZXJhdG9yICs9IGk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyohCi0gICAgICAgIEBicmllZiAgc3VidHJh
Y3QgZnJvbSBpdGVyYXRvcgotICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBpcyBpbml0aWFsaXpl
ZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCi0gICAgICAgICovCi0gICAgICAgIGl0ZXJf
aW1wbCYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgaSkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG9wZXJhdG9yKz0oLWkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyohCi0gICAg
ICAgIEBicmllZiAgYWRkIHRvIGl0ZXJhdG9yCi0gICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlz
IGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KLSAgICAgICAgKi8KLSAg
ICAgICAgaXRlcl9pbXBsIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgaSkKLSAgICAgICAgewot
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSAqdGhpczsKLSAgICAgICAgICAgIHJlc3VsdCArPSBp
OwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIQot
ICAgICAgICBAYnJpZWYgIHN1YnRyYWN0IGZyb20gaXRlcmF0b3IKLSAgICAgICAgQHByZSBUaGUg
aXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJgLgotICAg
ICAgICAqLwotICAgICAgICBpdGVyX2ltcGwgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBpKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBhdXRvIHJlc3VsdCA9ICp0aGlzOwotICAgICAgICAgICAg
cmVzdWx0IC09IGk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAg
ICAgICAgLyohCi0gICAgICAgIEBicmllZiAgcmV0dXJuIGRpZmZlcmVuY2UKLSAgICAgICAgQHBy
ZSBUaGUgaXRlcmF0b3IgaXMgaW5pdGlhbGl6ZWQ7IGkuZS4gYG1fb2JqZWN0ICE9IG51bGxwdHJg
LgotICAgICAgICAqLwotICAgICAgICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0IGl0
ZXJfaW1wbCYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydChtX29i
amVjdCAhPSBudWxscHRyKTsKLQotICAgICAgICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90eXBl
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVf
dDo6b2JqZWN0OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgSlNPTl9U
SFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigiY2Fubm90IHVzZSBvZmZzZXRzIHdpdGggb2JqZWN0IGl0
ZXJhdG9ycyIpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBjYXNlIGJh
c2ljX2pzb246OnZhbHVlX3Q6OmFycmF5OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1faXQuYXJyYXlfaXRlcmF0b3IgLSBvdGhlci5tX2l0LmFycmF5X2l0
ZXJhdG9yOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9pdC5wcmltaXRp
dmVfaXRlcmF0b3IgLSBvdGhlci5tX2l0LnByaW1pdGl2ZV9pdGVyYXRvcjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKiEKLSAgICAgICAg
QGJyaWVmICBhY2Nlc3MgdG8gc3VjY2Vzc29yCi0gICAgICAgIEBwcmUgVGhlIGl0ZXJhdG9yIGlz
IGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxscHRyYC4KLSAgICAgICAgKi8KLSAg
ICAgICAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIG4pIGNvbnN0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGFzc2VydChtX29iamVjdCAhPSBudWxscHRyKTsKLQotICAgICAg
ICAgICAgc3dpdGNoIChtX29iamVjdC0+bV90eXBlKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6b2JqZWN0OgotICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigiY2Fu
bm90IHVzZSBvcGVyYXRvcltdIGZvciBvYmplY3QgaXRlcmF0b3JzIikpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIGNhc2UgYmFzaWNfanNvbjo6dmFsdWVfdDo6YXJyYXk6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKnN0ZDo6bmV4
dChtX2l0LmFycmF5X2l0ZXJhdG9yLCBuKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBjYXNlIGJhc2ljX2pzb246OnZhbHVlX3Q6Om51bGw6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBKU09OX1RIUk9XKHN0ZDo6b3V0X29mX3JhbmdlKCJjYW5u
b3QgZ2V0IHZhbHVlIikpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9pdC5w
cmltaXRpdmVfaXRlcmF0b3IuZ2V0X3ZhbHVlKCkgPT0gLW4pCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAqbV9vYmplY3Q7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBKU09OX1RIUk9XKHN0ZDo6b3V0X29m
X3JhbmdlKCJjYW5ub3QgZ2V0IHZhbHVlIikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIQotICAgICAgICBAYnJpZWYgIHJldHVybiB0
aGUga2V5IG9mIGFuIG9iamVjdCBpdGVyYXRvcgotICAgICAgICBAcHJlIFRoZSBpdGVyYXRvciBp
cyBpbml0aWFsaXplZDsgaS5lLiBgbV9vYmplY3QgIT0gbnVsbHB0cmAuCi0gICAgICAgICovCi0g
ICAgICAgIHR5cGVuYW1lIG9iamVjdF90OjprZXlfdHlwZSBrZXkoKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBhc3NlcnQobV9vYmplY3QgIT0gbnVsbHB0cik7Ci0KLSAgICAgICAgICAg
IGlmIChtX29iamVjdC0+aXNfb2JqZWN0KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIG1faXQub2JqZWN0X2l0ZXJhdG9yLT5maXJzdDsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigiY2Fubm90IHVzZSBrZXko
KSBmb3Igbm9uLW9iamVjdCBpdGVyYXRvcnMiKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiEK
LSAgICAgICAgQGJyaWVmICByZXR1cm4gdGhlIHZhbHVlIG9mIGFuIGl0ZXJhdG9yCi0gICAgICAg
IEBwcmUgVGhlIGl0ZXJhdG9yIGlzIGluaXRpYWxpemVkOyBpLmUuIGBtX29iamVjdCAhPSBudWxs
cHRyYC4KLSAgICAgICAgKi8KLSAgICAgICAgcmVmZXJlbmNlIHZhbHVlKCkgY29uc3QKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdG9yKigpOwotICAgICAgICB9Ci0KLSAgICAg
IHByaXZhdGU6Ci0gICAgICAgIC8vLyBhc3NvY2lhdGVkIEpTT04gaW5zdGFuY2UKLSAgICAgICAg
cG9pbnRlciBtX29iamVjdCA9IG51bGxwdHI7Ci0gICAgICAgIC8vLyB0aGUgYWN0dWFsIGl0ZXJh
dG9yIG9mIHRoZSBhc3NvY2lhdGVkIGluc3RhbmNlCi0gICAgICAgIGludGVybmFsX2l0ZXJhdG9y
IG1faXQgPSBpbnRlcm5hbF9pdGVyYXRvcigpOwotICAgIH07Ci0KLSAgICAvKiEKLSAgICBAYnJp
ZWYgYSB0ZW1wbGF0ZSBmb3IgYSByZXZlcnNlIGl0ZXJhdG9yIGNsYXNzCi0KLSAgICBAdHBhcmFt
IEJhc2UgdGhlIGJhc2UgaXRlcmF0b3IgdHlwZSB0byByZXZlcnNlLiBWYWxpZCB0eXBlcyBhcmUg
QHJlZgotICAgIGl0ZXJhdG9yICh0byBjcmVhdGUgQHJlZiByZXZlcnNlX2l0ZXJhdG9yKSBhbmQg
QHJlZiBjb25zdF9pdGVyYXRvciAodG8KLSAgICBjcmVhdGUgQHJlZiBjb25zdF9yZXZlcnNlX2l0
ZXJhdG9yKS4KLQotICAgIEByZXF1aXJlbWVudCBUaGUgY2xhc3Mgc2F0aXNmaWVzIHRoZSBmb2xs
b3dpbmcgY29uY2VwdCByZXF1aXJlbWVudHM6Ci0gICAgLSBbUmFuZG9tQWNjZXNzSXRlcmF0b3Jd
KGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2NvbmNlcHQvUmFuZG9tQWNjZXNzSXRl
cmF0b3IpOgotICAgICAgVGhlIGl0ZXJhdG9yIHRoYXQgY2FuIGJlIG1vdmVkIHRvIHBvaW50IChm
b3J3YXJkIGFuZCBiYWNrd2FyZCkgdG8gYW55Ci0gICAgICBlbGVtZW50IGluIGNvbnN0YW50IHRp
bWUuCi0gICAgLSBbT3V0cHV0SXRlcmF0b3JdKGh0dHA6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cv
Y3BwL2NvbmNlcHQvT3V0cHV0SXRlcmF0b3IpOgotICAgICAgSXQgaXMgcG9zc2libGUgdG8gd3Jp
dGUgdG8gdGhlIHBvaW50ZWQtdG8gZWxlbWVudCAob25seSBpZiBAYSBCYXNlIGlzCi0gICAgICBA
cmVmIGl0ZXJhdG9yKS4KLQotICAgIEBzaW5jZSB2ZXJzaW9uIDEuMC4wCi0gICAgKi8KLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBCYXNlPgotICAgIGNsYXNzIGpzb25fcmV2ZXJzZV9pdGVyYXRvciA6
IHB1YmxpYyBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8QmFzZT4KLSAgICB7Ci0gICAgICBwdWJsaWM6
Ci0gICAgICAgIC8vLyBzaG9ydGN1dCB0byB0aGUgcmV2ZXJzZSBpdGVyYXRvciBhZGFwdG9yCi0g
ICAgICAgIHVzaW5nIGJhc2VfaXRlcmF0b3IgPSBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8QmFzZT47
Ci0gICAgICAgIC8vLyB0aGUgcmVmZXJlbmNlIHR5cGUgZm9yIHRoZSBwb2ludGVkLXRvIGVsZW1l
bnQKLSAgICAgICAgdXNpbmcgcmVmZXJlbmNlID0gdHlwZW5hbWUgQmFzZTo6cmVmZXJlbmNlOwot
Ci0gICAgICAgIC8vLyBjcmVhdGUgcmV2ZXJzZSBpdGVyYXRvciBmcm9tIGl0ZXJhdG9yCi0gICAg
ICAgIGpzb25fcmV2ZXJzZV9pdGVyYXRvcihjb25zdCB0eXBlbmFtZSBiYXNlX2l0ZXJhdG9yOjpp
dGVyYXRvcl90eXBlJiBpdCkgbm9leGNlcHQKLSAgICAgICAgICAgIDogYmFzZV9pdGVyYXRvcihp
dCkKLSAgICAgICAge30KLQotICAgICAgICAvLy8gY3JlYXRlIHJldmVyc2UgaXRlcmF0b3IgZnJv
bSBiYXNlIGNsYXNzCi0gICAgICAgIGpzb25fcmV2ZXJzZV9pdGVyYXRvcihjb25zdCBiYXNlX2l0
ZXJhdG9yJiBpdCkgbm9leGNlcHQKLSAgICAgICAgICAgIDogYmFzZV9pdGVyYXRvcihpdCkKLSAg
ICAgICAge30KLQotICAgICAgICAvLy8gcG9zdC1pbmNyZW1lbnQgKGl0KyspCi0gICAgICAgIGpz
b25fcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvcisrKGludCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGJhc2VfaXRlcmF0b3I6Om9wZXJhdG9yKysoMSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLy8gcHJlLWluY3JlbWVudCAoKytpdCkKLSAgICAgICAganNvbl9yZXZlcnNlX2l0ZXJh
dG9yJiBvcGVyYXRvcisrKCkKLSAgICAgICAgewotICAgICAgICAgICAgYmFzZV9pdGVyYXRvcjo6
b3BlcmF0b3IrKygpOwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8vIHBvc3QtZGVjcmVtZW50IChpdC0tKQotICAgICAgICBqc29uX3JldmVyc2VfaXRl
cmF0b3Igb3BlcmF0b3ItLShpbnQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBiYXNl
X2l0ZXJhdG9yOjpvcGVyYXRvci0tKDEpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIHByZS1k
ZWNyZW1lbnQgKC0taXQpCi0gICAgICAgIGpzb25fcmV2ZXJzZV9pdGVyYXRvciYgb3BlcmF0b3It
LSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGJhc2VfaXRlcmF0b3I6Om9wZXJhdG9yLS0oKTsK
LSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyBhZGQg
dG8gaXRlcmF0b3IKLSAgICAgICAganNvbl9yZXZlcnNlX2l0ZXJhdG9yJiBvcGVyYXRvcis9KGRp
ZmZlcmVuY2VfdHlwZSBpKQotICAgICAgICB7Ci0gICAgICAgICAgICBiYXNlX2l0ZXJhdG9yOjpv
cGVyYXRvcis9KGkpOwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8vIGFkZCB0byBpdGVyYXRvcgotICAgICAgICBqc29uX3JldmVyc2VfaXRlcmF0b3Ig
b3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBpKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAg
ICBhdXRvIHJlc3VsdCA9ICp0aGlzOwotICAgICAgICAgICAgcmVzdWx0ICs9IGk7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIHN1YnRyYWN0IGZy
b20gaXRlcmF0b3IKLSAgICAgICAganNvbl9yZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yLShkaWZm
ZXJlbmNlX3R5cGUgaSkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXV0byByZXN1bHQg
PSAqdGhpczsKLSAgICAgICAgICAgIHJlc3VsdCAtPSBpOwotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyByZXR1cm4gZGlmZmVyZW5jZQotICAgICAg
ICBkaWZmZXJlbmNlX3R5cGUgb3BlcmF0b3ItKGNvbnN0IGpzb25fcmV2ZXJzZV9pdGVyYXRvciYg
b3RoZXIpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiB0aGlzLT5iYXNlKCkg
LSBvdGhlci5iYXNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gYWNjZXNzIHRvIHN1Y2Nl
c3NvcgotICAgICAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgbikgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICoodGhpcy0+b3BlcmF0b3IrKG4pKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vLyByZXR1cm4gdGhlIGtleSBvZiBhbiBvYmplY3QgaXRl
cmF0b3IKLSAgICAgICAgdHlwZW5hbWUgb2JqZWN0X3Q6OmtleV90eXBlIGtleSgpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXQgPSAtLXRoaXMtPmJhc2UoKTsKLSAgICAgICAg
ICAgIHJldHVybiBpdC5rZXkoKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vLyByZXR1cm4gdGhl
IHZhbHVlIG9mIGFuIGl0ZXJhdG9yCi0gICAgICAgIHJlZmVyZW5jZSB2YWx1ZSgpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGF1dG8gaXQgPSAtLXRoaXMtPmJhc2UoKTsKLSAgICAgICAg
ICAgIHJldHVybiBpdC5vcGVyYXRvciAqICgpOwotICAgICAgICB9Ci0gICAgfTsKLQotCi0gIHBy
aXZhdGU6Ci0gICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotICAgIC8vIGxleGVyIGFuZCBwYXJz
ZXIgLy8KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSAgICAvKiEKLSAgICBAYnJpZWYg
bGV4aWNhbCBhbmFseXNpcwotCi0gICAgVGhpcyBjbGFzcyBvcmdhbml6ZXMgdGhlIGxleGljYWwg
YW5hbHlzaXMgZHVyaW5nIEpTT04gZGVzZXJpYWxpemF0aW9uLiBUaGUKLSAgICBjb3JlIG9mIGl0
IGlzIGEgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgW3JlMmNdKGh0dHA6Ly9yZTJjLm9yZykgdGhhdAot
ICAgIHByb2Nlc3NlcyBhIGJ1ZmZlciBhbmQgcmVjb2duaXplcyB0b2tlbnMgYWNjb3JkaW5nIHRv
IFJGQyA3MTU5LgotICAgICovCi0gICAgY2xhc3MgbGV4ZXIKLSAgICB7Ci0gICAgICBwdWJsaWM6
Ci0gICAgICAgIC8vLyB0b2tlbiB0eXBlcyBmb3IgdGhlIHBhcnNlcgotICAgICAgICBlbnVtIGNs
YXNzIHRva2VuX3R5cGUKLSAgICAgICAgewotICAgICAgICAgICAgdW5pbml0aWFsaXplZCwgICAv
Ly88IGluZGljYXRpbmcgdGhlIHNjYW5uZXIgaXMgdW5pbml0aWFsaXplZAotICAgICAgICAgICAg
bGl0ZXJhbF90cnVlLCAgICAvLy88IHRoZSBgdHJ1ZWAgbGl0ZXJhbAotICAgICAgICAgICAgbGl0
ZXJhbF9mYWxzZSwgICAvLy88IHRoZSBgZmFsc2VgIGxpdGVyYWwKLSAgICAgICAgICAgIGxpdGVy
YWxfbnVsbCwgICAgLy8vPCB0aGUgYG51bGxgIGxpdGVyYWwKLSAgICAgICAgICAgIHZhbHVlX3N0
cmluZywgICAgLy8vPCBhIHN0cmluZyAtLSB1c2UgZ2V0X3N0cmluZygpIGZvciBhY3R1YWwgdmFs
dWUKLSAgICAgICAgICAgIHZhbHVlX3Vuc2lnbmVkLCAgLy8vPCBhbiB1bnNpZ25lZCBpbnRlZ2Vy
IC0tIHVzZSBnZXRfbnVtYmVyKCkgZm9yIGFjdHVhbCB2YWx1ZQotICAgICAgICAgICAgdmFsdWVf
aW50ZWdlciwgICAvLy88IGEgc2lnbmVkIGludGVnZXIgLS0gdXNlIGdldF9udW1iZXIoKSBmb3Ig
YWN0dWFsIHZhbHVlCi0gICAgICAgICAgICB2YWx1ZV9mbG9hdCwgICAgIC8vLzwgYW4gZmxvYXRp
bmcgcG9pbnQgbnVtYmVyIC0tIHVzZSBnZXRfbnVtYmVyKCkgZm9yIGFjdHVhbCB2YWx1ZQotICAg
ICAgICAgICAgYmVnaW5fYXJyYXksICAgICAvLy88IHRoZSBjaGFyYWN0ZXIgZm9yIGFycmF5IGJl
Z2luIGBbYAotICAgICAgICAgICAgYmVnaW5fb2JqZWN0LCAgICAvLy88IHRoZSBjaGFyYWN0ZXIg
Zm9yIG9iamVjdCBiZWdpbiBge2AKLSAgICAgICAgICAgIGVuZF9hcnJheSwgICAgICAgLy8vPCB0
aGUgY2hhcmFjdGVyIGZvciBhcnJheSBlbmQgYF1gCi0gICAgICAgICAgICBlbmRfb2JqZWN0LCAg
ICAgIC8vLzwgdGhlIGNoYXJhY3RlciBmb3Igb2JqZWN0IGVuZCBgfWAKLSAgICAgICAgICAgIG5h
bWVfc2VwYXJhdG9yLCAgLy8vPCB0aGUgbmFtZSBzZXBhcmF0b3IgYDpgCi0gICAgICAgICAgICB2
YWx1ZV9zZXBhcmF0b3IsIC8vLzwgdGhlIHZhbHVlIHNlcGFyYXRvciBgLGAKLSAgICAgICAgICAg
IHBhcnNlX2Vycm9yLCAgICAgLy8vPCBpbmRpY2F0aW5nIGEgcGFyc2UgZXJyb3IKLSAgICAgICAg
ICAgIGVuZF9vZl9pbnB1dCAgICAgLy8vPCBpbmRpY2F0aW5nIHRoZSBlbmQgb2YgdGhlIGlucHV0
IGJ1ZmZlcgotICAgICAgICB9OwotCi0gICAgICAgIC8vLyB0aGUgY2hhciB0eXBlIHRvIHVzZSBp
biB0aGUgbGV4ZXIKLSAgICAgICAgdXNpbmcgbGV4ZXJfY2hhcl90ID0gdW5zaWduZWQgY2hhcjsK
LQotICAgICAgICAvLy8gYSBsZXhlciBmcm9tIGEgYnVmZmVyIHdpdGggZ2l2ZW4gbGVuZ3RoCi0g
ICAgICAgIGxleGVyKGNvbnN0IGxleGVyX2NoYXJfdCogYnVmZiwgY29uc3Qgc2l6ZV90IGxlbikg
bm9leGNlcHQKLSAgICAgICAgICAgIDogbV9jb250ZW50KGJ1ZmYpCi0gICAgICAgIHsKLSAgICAg
ICAgICAgIGFzc2VydChtX2NvbnRlbnQgIT0gbnVsbHB0cik7Ci0gICAgICAgICAgICBtX3N0YXJ0
ID0gbV9jdXJzb3IgPSBtX2NvbnRlbnQ7Ci0gICAgICAgICAgICBtX2xpbWl0ID0gbV9jb250ZW50
ICsgbGVuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIGEgbGV4ZXIgZnJvbSBhbiBpbnB1dCBz
dHJlYW0KLSAgICAgICAgZXhwbGljaXQgbGV4ZXIoc3RkOjppc3RyZWFtJiBzKQotICAgICAgICAg
ICAgOiBtX3N0cmVhbSgmcyksIG1fbGluZV9idWZmZXIoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICAvLyBpbW1lZGlhdGVseSBhYm9ydCBpZiBzdHJlYW0gaXMgZXJyb25lb3VzCi0gICAgICAgICAg
ICBpZiAocy5mYWlsKCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNPTl9USFJP
VyhzdGQ6OmludmFsaWRfYXJndW1lbnQoInN0cmVhbSBlcnJvciIpKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gZmlsbCBidWZmZXIKLSAgICAgICAgICAgIGZpbGxfbGluZV9idWZm
ZXIoKTsKLQotICAgICAgICAgICAgLy8gc2tpcCBVVEYtOCBieXRlLW9yZGVyIG1hcmsKLSAgICAg
ICAgICAgIGlmIChtX2xpbmVfYnVmZmVyLnNpemUoKSA+PSAzIGFuZCBtX2xpbmVfYnVmZmVyLnN1
YnN0cigwLCAzKSA9PSAiXHhFRlx4QkJceEJGIikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBtX2xpbmVfYnVmZmVyWzBdID0gJyAnOwotICAgICAgICAgICAgICAgIG1fbGluZV9idWZm
ZXJbMV0gPSAnICc7Ci0gICAgICAgICAgICAgICAgbV9saW5lX2J1ZmZlclsyXSA9ICcgJzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIHN3aXRjaCBvZmYgdW53YW50ZWQg
ZnVuY3Rpb25zIChkdWUgdG8gcG9pbnRlciBtZW1iZXJzKQotICAgICAgICBsZXhlcigpID0gZGVs
ZXRlOwotICAgICAgICBsZXhlcihjb25zdCBsZXhlciYpID0gZGVsZXRlOwotICAgICAgICBsZXhl
ciBvcGVyYXRvcj0oY29uc3QgbGV4ZXImKSA9IGRlbGV0ZTsKLQotICAgICAgICAvKiEKLSAgICAg
ICAgQGJyaWVmIGNyZWF0ZSBhIHN0cmluZyBmcm9tIG9uZSBvciB0d28gVW5pY29kZSBjb2RlIHBv
aW50cwotCi0gICAgICAgIFRoZXJlIGFyZSB0d28gY2FzZXM6ICgxKSBAYSBjb2RlcG9pbnQxIGlz
IGluIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwKLSAgICAgICAgUGxhbmUgKFUrMDAwMCB0aHJvdWdo
IFUrRkZGRikgYW5kIEBhIGNvZGVwb2ludDIgaXMgMCwgb3IgKDIpCi0gICAgICAgIEBhIGNvZGVw
b2ludDEgYW5kIEBhIGNvZGVwb2ludDIgYXJlIGEgVVRGLTE2IHN1cnJvZ2F0ZSBwYWlyIHRvCi0g
ICAgICAgIHJlcHJlc2VudCBhIGNvZGUgcG9pbnQgYWJvdmUgVStGRkZGLgotCi0gICAgICAgIEBw
YXJhbVtpbl0gY29kZXBvaW50MSAgdGhlIGNvZGUgcG9pbnQgKGNhbiBiZSBoaWdoIHN1cnJvZ2F0
ZSkKLSAgICAgICAgQHBhcmFtW2luXSBjb2RlcG9pbnQyICB0aGUgY29kZSBwb2ludCAoY2FuIGJl
IGxvdyBzdXJyb2dhdGUgb3IgMCkKLQotICAgICAgICBAcmV0dXJuIHN0cmluZyByZXByZXNlbnRh
dGlvbiBvZiB0aGUgY29kZSBwb2ludDsgdGhlIGxlbmd0aCBvZiB0aGUKLSAgICAgICAgcmVzdWx0
IHN0cmluZyBpcyBiZXR3ZWVuIDEgYW5kIDQgY2hhcmFjdGVycy4KLQotICAgICAgICBAdGhyb3cg
c3RkOjpvdXRfb2ZfcmFuZ2UgaWYgY29kZSBwb2ludCBpcyA+IDB4MTBmZmZmOyBleGFtcGxlOiBg
ImNvZGUKLSAgICAgICAgcG9pbnRzIGFib3ZlIDB4MTBGRkZGIGFyZSBpbnZhbGlkImAKLSAgICAg
ICAgQHRocm93IHN0ZDo6aW52YWxpZF9hcmd1bWVudCBpZiB0aGUgbG93IHN1cnJvZ2F0ZSBpcyBp
bnZhbGlkOyBleGFtcGxlOgotICAgICAgICBgIiJtaXNzaW5nIG9yIHdyb25nIGxvdyBzdXJyb2dh
dGUiImAKLQotICAgICAgICBAY29tcGxleGl0eSBDb25zdGFudC4KLQotICAgICAgICBAc2VlIDxo
dHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi04I1NhbXBsZV9jb2RlPgotICAgICAgICAq
LwotICAgICAgICBzdGF0aWMgc3RyaW5nX3QgdG9fdW5pY29kZShjb25zdCBzdGQ6OnNpemVfdCBj
b2RlcG9pbnQxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnNpemVfdCBjb2RlcG9pbnQyID0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gY2FsY3Vs
YXRlIHRoZSBjb2RlIHBvaW50IGZyb20gdGhlIGdpdmVuIGNvZGUgcG9pbnRzCi0gICAgICAgICAg
ICBzdGQ6OnNpemVfdCBjb2RlcG9pbnQgPSBjb2RlcG9pbnQxOwotCi0gICAgICAgICAgICAvLyBj
aGVjayBpZiBjb2RlcG9pbnQxIGlzIGEgaGlnaCBzdXJyb2dhdGUKLSAgICAgICAgICAgIGlmIChj
b2RlcG9pbnQxID49IDB4RDgwMCBhbmQgY29kZXBvaW50MSA8PSAweERCRkYpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgY29kZXBvaW50MiBpcyBhIGxvdyBzdXJy
b2dhdGUKLSAgICAgICAgICAgICAgICBpZiAoY29kZXBvaW50MiA+PSAweERDMDAgYW5kIGNvZGVw
b2ludDIgPD0gMHhERkZGKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
Y29kZXBvaW50ID0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhpZ2ggc3Vycm9nYXRlIG9j
Y3VwaWVzIHRoZSBtb3N0IHNpZ25pZmljYW50IDIyIGJpdHMKLSAgICAgICAgICAgICAgICAgICAg
ICAgIChjb2RlcG9pbnQxIDw8IDEwKQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG93IHN1
cnJvZ2F0ZSBvY2N1cGllcyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgMTUgYml0cwotICAgICAgICAg
ICAgICAgICAgICAgICAgKyBjb2RlcG9pbnQyCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB0
aGVyZSBpcyBzdGlsbCB0aGUgMHhEODAwLCAweERDMDAgYW5kIDB4MTAwMDAgbm9pc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSByZXN1bHQgc28gd2UgaGF2ZSB0byBzdWJ0cmFj
dCB3aXRoOgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gKDB4RDgwMCA8PCAxMCkgKyBEQzAw
IC0gMHgxMDAwMCA9IDB4MzVGREMwMAotICAgICAgICAgICAgICAgICAgICAgICAgLSAweDM1RkRD
MDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjppbnZhbGlkX2FyZ3Vt
ZW50KCJtaXNzaW5nIG9yIHdyb25nIGxvdyBzdXJyb2dhdGUiKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdHJpbmdfdCByZXN1bHQ7Ci0KLSAgICAg
ICAgICAgIGlmIChjb2RlcG9pbnQgPCAweDgwKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIC8vIDEtYnl0ZSBjaGFyYWN0ZXJzOiAweHh4eHh4eCAoQVNDSUkpCi0gICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgxLCBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6dmFsdWVf
dHlwZT4oY29kZXBvaW50KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChj
b2RlcG9pbnQgPD0gMHg3ZmYpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gMi1i
eXRlIGNoYXJhY3RlcnM6IDExMHh4eHh4IDEweHh4eHh4Ci0gICAgICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgxLCBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6dmFsdWVfdHlwZT4oMHhD
MCB8ICgoY29kZXBvaW50ID4+IDYpICYgMHgxRikpKTsKLSAgICAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKDEsIHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0cmluZ190Ojp2YWx1ZV90eXBlPigweDgw
IHwgKGNvZGVwb2ludCAmIDB4M0YpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNl
IGlmIChjb2RlcG9pbnQgPD0gMHhmZmZmKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IC8vIDMtYnl0ZSBjaGFyYWN0ZXJzOiAxMTEweHh4eCAxMHh4eHh4eCAxMHh4eHh4eAotICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6
OnZhbHVlX3R5cGU+KDB4RTAgfCAoKGNvZGVwb2ludCA+PiAxMikgJiAweDBGKSkpOwotICAgICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSwgc3RhdGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6
OnZhbHVlX3R5cGU+KDB4ODAgfCAoKGNvZGVwb2ludCA+PiA2KSAmIDB4M0YpKSk7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgxLCBzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6
dmFsdWVfdHlwZT4oMHg4MCB8IChjb2RlcG9pbnQgJiAweDNGKSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZWxzZSBpZiAoY29kZXBvaW50IDw9IDB4MTBmZmZmKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIC8vIDQtYnl0ZSBjaGFyYWN0ZXJzOiAxMTExMHh4eCAxMHh4eHh4
eCAxMHh4eHh4eCAxMHh4eHh4eAotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSwgc3Rh
dGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4RjAgfCAoKGNvZGVwb2lu
dCA+PiAxOCkgJiAweDA3KSkpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSwgc3Rh
dGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4ODAgfCAoKGNvZGVwb2lu
dCA+PiAxMikgJiAweDNGKSkpOwotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSwgc3Rh
dGljX2Nhc3Q8dHlwZW5hbWUgc3RyaW5nX3Q6OnZhbHVlX3R5cGU+KDB4ODAgfCAoKGNvZGVwb2lu
dCA+PiA2KSAmIDB4M0YpKSk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxLCBzdGF0
aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6dmFsdWVfdHlwZT4oMHg4MCB8IChjb2RlcG9pbnQg
JiAweDNGKSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjpvdXRfb2ZfcmFuZ2UoImNvZGUgcG9p
bnRzIGFib3ZlIDB4MTBGRkZGIGFyZSBpbnZhbGlkIikpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIHJldHVybiBu
YW1lIG9mIHZhbHVlcyBvZiB0eXBlIHRva2VuX3R5cGUgKG9ubHkgdXNlZCBmb3IgZXJyb3JzKQot
ICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgdG9rZW5fdHlwZV9uYW1lKGNvbnN0IHRva2VuX3R5
cGUgdCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh0KQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6dW5pbml0aWFsaXplZDoKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICI8dW5pbml0aWFsaXplZD4iOwotICAgICAgICAgICAgICAgIGNh
c2UgdG9rZW5fdHlwZTo6bGl0ZXJhbF90cnVlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
InRydWUgbGl0ZXJhbCI7Ci0gICAgICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjpsaXRlcmFs
X2ZhbHNlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gImZhbHNlIGxpdGVyYWwiOwotICAg
ICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6bGl0ZXJhbF9udWxsOgotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gIm51bGwgbGl0ZXJhbCI7Ci0gICAgICAgICAgICAgICAgY2FzZSB0b2tl
bl90eXBlOjp2YWx1ZV9zdHJpbmc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAic3RyaW5n
IGxpdGVyYWwiOwotICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6OnRva2VuX3R5cGU6OnZhbHVl
X3Vuc2lnbmVkOgotICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6OnRva2VuX3R5cGU6OnZhbHVl
X2ludGVnZXI6Ci0gICAgICAgICAgICAgICAgY2FzZSBsZXhlcjo6dG9rZW5fdHlwZTo6dmFsdWVf
ZmxvYXQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAibnVtYmVyIGxpdGVyYWwiOwotICAg
ICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6YmVnaW5fYXJyYXk6Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiAiJ1snIjsKLSAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OmJl
Z2luX29iamVjdDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICIneyciOwotICAgICAgICAg
ICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6ZW5kX2FycmF5OgotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gIiddJyI7Ci0gICAgICAgICAgICAgICAgY2FzZSB0b2tlbl90eXBlOjplbmRfb2JqZWN0
OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIid9JyI7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSB0b2tlbl90eXBlOjpuYW1lX3NlcGFyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICInOiciOwotICAgICAgICAgICAgICAgIGNhc2UgdG9rZW5fdHlwZTo6dmFsdWVfc2VwYXJhdG9y
OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIicsJyI7Ci0gICAgICAgICAgICAgICAgY2Fz
ZSB0b2tlbl90eXBlOjpwYXJzZV9lcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICI8
cGFyc2UgZXJyb3I+IjsKLSAgICAgICAgICAgICAgICBjYXNlIHRva2VuX3R5cGU6OmVuZF9vZl9p
bnB1dDoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJlbmQgb2YgaW5wdXQiOwotICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAvLyBjYXRjaCBub24tZW51bSB2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJ1
bmtub3duIHRva2VuIjsgLy8gTENPVl9FWENMX0xJTkUKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKiEKLSAgICAgICAgVGhpcyBmdW5jdGlv
biBpbXBsZW1lbnRzIGEgc2Nhbm5lciBmb3IgSlNPTi4gSXQgaXMgc3BlY2lmaWVkIHVzaW5nCi0g
ICAgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCB0cnkgdG8gZm9sbG93IFJGQyA3MTU5IGFz
IGNsb3NlIGFzIHBvc3NpYmxlLgotICAgICAgICBUaGVzZSByZWd1bGFyIGV4cHJlc3Npb25zIGFy
ZSB0aGVuIHRyYW5zbGF0ZWQgaW50byBhIG1pbmltaXplZAotICAgICAgICBkZXRlcm1pbmlzdGlj
IGZpbml0ZSBhdXRvbWF0b24gKERGQSkgYnkgdGhlIHRvb2wKLSAgICAgICAgW3JlMmNdKGh0dHA6
Ly9yZTJjLm9yZykuIEFzIGEgcmVzdWx0LCB0aGUgdHJhbnNsYXRlZCBjb2RlIGZvciB0aGlzCi0g
ICAgICAgIGZ1bmN0aW9uIGNvbnNpc3RzIG9mIGEgbGFyZ2UgYmxvY2sgb2YgY29kZSB3aXRoIGBn
b3RvYCBqdW1wcy4KLQotICAgICAgICBAcmV0dXJuIHRoZSBjbGFzcyBvZiB0aGUgbmV4dCB0b2tl
biByZWFkIGZyb20gdGhlIGJ1ZmZlcgotCi0gICAgICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0
aGUgbGVuZ3RoIG9mIHRoZSBpbnB1dC5cbgotCi0gICAgICAgIFByb3Bvc2l0aW9uOiBUaGUgbG9v
cCBiZWxvdyB3aWxsIGFsd2F5cyB0ZXJtaW5hdGUgZm9yIGZpbml0ZSBpbnB1dC5cbgotCi0gICAg
ICAgIFByb29mIChieSBjb250cmFkaWN0aW9uKTogQXNzdW1lIGEgZmluaXRlIGlucHV0LiBUbyBs
b29wIGZvcmV2ZXIsIHRoZQotICAgICAgICBsb29wIG11c3QgbmV2ZXIgaGl0IGNvZGUgd2l0aCBh
IGBicmVha2Agc3RhdGVtZW50LiBUaGUgb25seSBjb2RlCi0gICAgICAgIHNuaXBwZXRzIHdpdGhv
dXQgYSBgYnJlYWtgIHN0YXRlbWVudCBhcmUgdGhlIGNvbnRpbnVlIHN0YXRlbWVudHMgZm9yCi0g
ICAgICAgIHdoaXRlc3BhY2UgYW5kIGJ5dGUtb3JkZXItbWFya3MuIFRvIGxvb3AgZm9yZXZlciwg
dGhlIGlucHV0IG11c3QgYmUgYW4KLSAgICAgICAgaW5maW5pdGUgc2VxdWVuY2Ugb2Ygd2hpdGVz
cGFjZSBvciBieXRlLW9yZGVyLW1hcmtzLiBUaGlzIGNvbnRyYWRpY3RzCi0gICAgICAgIHRoZSBh
c3N1bXB0aW9uIG9mIGZpbml0ZSBpbnB1dCwgcS5lLmQuCi0gICAgICAgICovCi0gICAgICAgIHRv
a2VuX3R5cGUgc2NhbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHdoaWxlICh0cnVlKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIHBvaW50ZXIgZm9yIGJhY2t0cmFja2luZyBp
bmZvcm1hdGlvbgotICAgICAgICAgICAgICAgIG1fbWFya2VyID0gbnVsbHB0cjsKLQotICAgICAg
ICAgICAgICAgIC8vIHJlbWVtYmVyIHRoZSBiZWdpbiBvZiB0aGUgdG9rZW4KLSAgICAgICAgICAg
ICAgICBtX3N0YXJ0ID0gbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG1fc3RhcnQg
IT0gbnVsbHB0cik7Ci0KLQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
bGV4ZXJfY2hhcl90IHl5Y2g7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB5eWFj
Y2VwdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFy
IHl5Ym1bXSA9Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIDAsICAzMiwgIDMyLCAgIDAsICAgMCwgIDMyLCAgIDAsICAgMCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIDE2MCwgMTI4LCAgIDAsIDEyOCwgMTI4LCAxMjgsIDEy
OCwgMTI4LAotICAgICAgICAgICAgICAgICAgICAgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgs
IDEyOCwgMTI4LCAxMjgsCi0gICAgICAgICAgICAgICAgICAgICAgICAxOTIsIDE5MiwgMTkyLCAx
OTIsIDE5MiwgMTkyLCAxOTIsIDE5MiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDE5MiwgMTky
LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LAotICAgICAgICAgICAgICAgICAgICAgICAg
MTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LAot
ICAgICAgICAgICAgICAgICAgICAgICAgMTI4LCAxMjgsIDEyOCwgMTI4LCAgIDAsIDEyOCwgMTI4
LCAxMjgsCi0gICAgICAgICAgICAgICAgICAgICAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwg
MTI4LCAxMjgsIDEyOCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDEyOCwgMTI4LCAxMjgsIDEy
OCwgMTI4LCAxMjgsIDEyOCwgMTI4LAotICAgICAgICAgICAgICAgICAgICAgICAgMTI4LCAxMjgs
IDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsCi0gICAgICAgICAgICAgICAgICAgICAgICAx
MjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwK
LSAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAw
LCAgIDAsICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwgICAwLCAgIDAsICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAg
MCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAg
IDAsICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwKLSAgICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKChtX2xpbWl0IC0gbV9jdXJzb3IpIDwgNSkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcig1KTsgICAgLy8g
TENPVl9FWENMX0xJTkUKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICB5eWNoID0gKm1fY3Vyc29yOwotICAgICAgICAgICAgICAgICAgICBpZiAoeXlibVswICsgeXlj
aF0gJiAzMikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
Z290byBiYXNpY19qc29uX3BhcnNlcl82OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdbJykKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy0nKQotICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICciJykKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9IDB4MDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJz
ZXJfMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnIScpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFz
aWNfanNvbl9wYXJzZXJfNDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcrJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19q
c29uX3BhcnNlcl80OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcsJykKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z290byBiYXNpY19qc29uX3BhcnNlcl8xMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFy
c2VyXzEyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoeXljaCA8PSAnLycpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJz
ZXJfNDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnMCcpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFz
aWNfanNvbl9wYXJzZXJfMTM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8xNTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzonKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2lj
X2pzb25fcGFyc2VyXzE3OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdaJykKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9w
YXJzZXJfMTk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJ24nKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoIDw9ICdlJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICddJykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8yMTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2lj
X2pzb25fcGFyc2VyXzQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8yMzsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
bScpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNDsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzI0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAneicpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAndCcpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMjU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNl
cl80OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAneycpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFzaWNfanNvbl9wYXJzZXJfMjY7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ30nKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzI4OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfNDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLWJhc2ljX2pzb25fcGFyc2Vy
XzI6Ci0gICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5cGU6
OmVuZF9vZl9pbnB1dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci1iYXNpY19qc29uX3BhcnNlcl80OgotICAgICAgICAgICAgICAgICAgICAr
K21fY3Vyc29yOwotYmFzaWNfanNvbl9wYXJzZXJfNToKLSAgICAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6cGFy
c2VfZXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotYmFzaWNfanNvbl9wYXJzZXJfNjoKLSAgICAgICAgICAgICAgICAgICAgKyttX2N1
cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fbGltaXQgPD0gbV9jdXJzb3IpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxfbGluZV9idWZm
ZXIoMSk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgeXljaCA9ICptX2N1cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Ym1bMCArIHl5Y2hdICYgMzIpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNjsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotYmFzaWNfanNvbl9wYXJzZXJfOToKLSAgICAg
ICAgICAgICAgICAgICAgeXlhY2NlcHQgPSAwOwotICAgICAgICAgICAgICAgICAgICB5eWNoID0g
KihtX21hcmtlciA9ICsrbV9jdXJzb3IpOwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAweDFGKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHg3RikKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAweEMxKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pz
b25fcGFyc2VyXzU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gMHhGNCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzU7Ci1iYXNpY19q
c29uX3BhcnNlcl8xMDoKLSAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0g
dG9rZW5fdHlwZTo6dmFsdWVfc2VwYXJhdG9yOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLWJhc2ljX2pzb25fcGFyc2VyXzEyOgotICAgICAg
ICAgICAgICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICcvJykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81OwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcwJykKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80MzsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnOScp
Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFz
aWNfanNvbl9wYXJzZXJfNDU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81OwotYmFzaWNfanNvbl9wYXJzZXJfMTM6Ci0g
ICAgICAgICAgICAgICAgICAgIHl5YWNjZXB0ID0gMTsKLSAgICAgICAgICAgICAgICAgICAgeXlj
aCA9ICoobV9tYXJrZXIgPSArK21fY3Vyc29yKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJzknKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA9PSAnLicpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80NzsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICcwJykK
LSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ4OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0UnKQotICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoID49ICdFJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTE7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdlJykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNv
bl9wYXJzZXJfNTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci1iYXNpY19qc29uX3BhcnNlcl8x
NDoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90
b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6dmFsdWVfdW5zaWduZWQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotYmFzaWNfanNvbl9wYXJzZXJf
MTU6Ci0gICAgICAgICAgICAgICAgICAgIHl5YWNjZXB0ID0gMTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9tYXJrZXIgPSArK21fY3Vyc29yOwotICAgICAgICAgICAgICAgICAgICBpZiAoKG1fbGlt
aXQgLSBtX2N1cnNvcikgPCAzKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDMpOyAgICAvLyBMQ09WX0VYQ0xfTElORQotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWJtWzAgKyB5eWNoXSAmIDY0KQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFy
c2VyXzE1OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICdEJykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHl5Y2ggPT0gJy4nKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNDc7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25f
cGFyc2VyXzE0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJ0UnKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnZScpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl81MTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMTQ7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLWJhc2ljX2pzb25fcGFyc2VyXzE3OgotICAgICAgICAgICAgICAgICAgICArK21fY3Vy
c29yOwotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0
X3Rva2VuX3R5cGUgPSB0b2tlbl90eXBlOjpuYW1lX3NlcGFyYXRvcjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci1iYXNpY19qc29uX3BhcnNl
cl8xOToKLSAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlw
ZTo6YmVnaW5fYXJyYXk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgfQotYmFzaWNfanNvbl9wYXJzZXJfMjE6Ci0gICAgICAgICAgICAgICAgICAg
ICsrbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGxhc3RfdG9rZW5fdHlwZSA9IHRva2VuX3R5cGU6OmVuZF9hcnJheTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci1iYXNpY19qc29uX3Bh
cnNlcl8yMzoKLSAgICAgICAgICAgICAgICAgICAgeXlhY2NlcHQgPSAwOwotICAgICAgICAgICAg
ICAgICAgICB5eWNoID0gKihtX21hcmtlciA9ICsrbV9jdXJzb3IpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoeXljaCA9PSAnYScpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTI7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81OwotYmFz
aWNfanNvbl9wYXJzZXJfMjQ6Ci0gICAgICAgICAgICAgICAgICAgIHl5YWNjZXB0ID0gMDsKLSAg
ICAgICAgICAgICAgICAgICAgeXljaCA9ICoobV9tYXJrZXIgPSArK21fY3Vyc29yKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ3UnKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzUzOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJz
ZXJfNTsKLWJhc2ljX2pzb25fcGFyc2VyXzI1OgotICAgICAgICAgICAgICAgICAgICB5eWFjY2Vw
dCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqKG1fbWFya2VyID0gKyttX2N1cnNv
cik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdyJykKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81
NDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2lj
X2pzb25fcGFyc2VyXzU7Ci1iYXNpY19qc29uX3BhcnNlcl8yNjoKLSAgICAgICAgICAgICAgICAg
ICAgKyttX2N1cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6YmVnaW5fb2JqZWN0OwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLWJhc2ljX2pz
b25fcGFyc2VyXzI4OgotICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOwotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0
b2tlbl90eXBlOjplbmRfb2JqZWN0OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLWJhc2ljX2pzb25fcGFyc2VyXzMwOgotICAgICAgICAgICAg
ICAgICAgICArK21fY3Vyc29yOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBt
X2N1cnNvcikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJTkUKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1fY3Vyc29yOwotYmFzaWNfanNv
bl9wYXJzZXJfMzE6Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWJtWzAgKyB5eWNoXSAmIDEy
OCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8zMDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAweEUwKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnXFwnKQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4MUYpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnIicpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzMzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzM1Owot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9IDB4QzEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
eXljaCA8PSAweERGKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zNjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8zNzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4RUYpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PT0gMHhFRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfMzg7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHhGMCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9w
YXJzZXJfNDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4RjMpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFy
c2VyXzQxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoeXljaCA8PSAweEY0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNl
cl80MjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLWJhc2ljX2pzb25fcGFyc2VyXzMyOgotICAg
ICAgICAgICAgICAgICAgICBtX2N1cnNvciA9IG1fbWFya2VyOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoeXlhY2NlcHQgPD0gMSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5YWNjZXB0ID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81Owot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMTQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXlhY2NlcHQgPT0gMikKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhc2ljX2pzb25fcGFyc2VyXzQ0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTg7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLWJhc2ljX2pzb25fcGFy
c2VyXzMzOgotICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOwotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Rva2VuX3R5cGUgPSB0b2tlbl90
eXBlOjp2YWx1ZV9zdHJpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotYmFzaWNfanNvbl9wYXJzZXJfMzU6Ci0gICAgICAgICAgICAgICAg
ICAgICsrbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2xpbWl0IDw9IG1fY3Vy
c29yKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxs
X2xpbmVfYnVmZmVyKDEpOyAgICAvLyBMQ09WX0VYQ0xfTElORQotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9ICdlJykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKQotICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICciJykKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfMzA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcuJykKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFzaWNfanNvbl9wYXJzZXJfMzI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzA7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJ1xcJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdbJykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8zMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMw
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnYicpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFz
aWNfanNvbl9wYXJzZXJfMzA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAncScp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJ2YnKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPT0gJ24nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMDsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8zMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAncycpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
cicpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzA7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ3Qn
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoIDw9ICd1JykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81NTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgfQotYmFzaWNfanNvbl9wYXJzZXJfMzY6Ci0gICAgICAgICAgICAgICAgICAgICsrbV9jdXJz
b3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2xpbWl0IDw9IG1fY3Vyc29yKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVy
KDEpOyAgICAvLyBMQ09WX0VYQ0xfTElORQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9IDB4N0YpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHhCRikKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMDsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25f
cGFyc2VyXzMyOwotYmFzaWNfanNvbl9wYXJzZXJfMzc6Ci0gICAgICAgICAgICAgICAgICAgICsr
bV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2xpbWl0IDw9IG1fY3Vyc29yKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVf
YnVmZmVyKDEpOyAgICAvLyBMQ09WX0VYQ0xfTElORQotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh5eWNoIDw9IDB4OUYpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHhCRikKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8z
NjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2lj
X2pzb25fcGFyc2VyXzMyOwotYmFzaWNfanNvbl9wYXJzZXJfMzg6Ci0gICAgICAgICAgICAgICAg
ICAgICsrbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2xpbWl0IDw9IG1fY3Vy
c29yKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxs
X2xpbmVfYnVmZmVyKDEpOyAgICAvLyBMQ09WX0VYQ0xfTElORQotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoIDw9IDB4N0YpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHhCRikKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3Bh
cnNlcl8zNjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhc2ljX2pzb25fcGFyc2VyXzMyOwotYmFzaWNfanNvbl9wYXJzZXJfMzk6Ci0gICAgICAgICAg
ICAgICAgICAgICsrbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2xpbWl0IDw9
IG1fY3Vyc29yKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBmaWxsX2xpbmVfYnVmZmVyKDEpOyAgICAvLyBMQ09WX0VYQ0xfTElORQotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4N0YpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHg5RikKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19q
c29uX3BhcnNlcl8zNjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwotYmFzaWNfanNvbl9wYXJzZXJfNDA6Ci0gICAg
ICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2xp
bWl0IDw9IG1fY3Vyc29yKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDEpOyAgICAvLyBMQ09WX0VYQ0xfTElORQotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4OEYpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gMHhC
RikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8zODsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwotYmFzaWNfanNvbl9wYXJzZXJfNDE6
Ci0gICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChtX2xpbWl0IDw9IG1fY3Vyc29yKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDEpOyAgICAvLyBMQ09WX0VYQ0xfTElORQot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqbV9jdXJz
b3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4N0YpCi0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJf
MzI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2gg
PD0gMHhCRikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
Z290byBiYXNpY19qc29uX3BhcnNlcl8zODsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwotYmFzaWNfanNvbl9wYXJz
ZXJfNDI6Ci0gICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2xpbWl0IDw9IG1fY3Vyc29yKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDEpOyAgICAvLyBMQ09WX0VYQ0xf
TElORQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAq
bV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9IDB4N0YpCi0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9w
YXJzZXJfMzI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KHl5Y2ggPD0gMHg4RikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zODsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwotYmFzaWNfanNv
bl9wYXJzZXJfNDM6Ci0gICAgICAgICAgICAgICAgICAgIHl5YWNjZXB0ID0gMjsKLSAgICAgICAg
ICAgICAgICAgICAgeXljaCA9ICoobV9tYXJrZXIgPSArK21fY3Vyc29yKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAnLicpCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80
NzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoID49ICcwJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ4OwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5
Y2ggPD0gJ0UnKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh5eWNoID49ICdFJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJf
NTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdlJykKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci1iYXNp
Y19qc29uX3BhcnNlcl80NDoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6dmFsdWVfaW50ZWdlcjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci1iYXNp
Y19qc29uX3BhcnNlcl80NToKLSAgICAgICAgICAgICAgICAgICAgeXlhY2NlcHQgPSAyOwotICAg
ICAgICAgICAgICAgICAgICBtX21hcmtlciA9ICsrbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICgobV9saW1pdCAtIG1fY3Vyc29yKSA8IDMpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxfbGluZV9idWZmZXIoMyk7ICAgIC8vIExDT1Zf
RVhDTF9MSU5FCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgeXlj
aCA9ICptX2N1cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKQotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9PSAn
LicpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80NzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25f
cGFyc2VyXzQ0OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl80NTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdFJykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRCcpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzUxOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh5eWNoID09ICdlJykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFzaWNfanNvbl9wYXJzZXJfNDQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLWJhc2ljX2pzb25fcGFyc2VyXzQ3OgotICAgICAgICAgICAgICAgICAg
ICB5eWNoID0gKisrbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcv
JykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8zMjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnOScpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNTY7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsK
LWJhc2ljX2pzb25fcGFyc2VyXzQ4OgotICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOwot
ICAgICAgICAgICAgICAgICAgICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsg
ICAgLy8gTENPVl9FWENMX0xJTkUKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICB5eWNoID0gKm1fY3Vyc29yOwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnLycpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfNTA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzQ4OwotICAgICAgICAg
ICAgICAgICAgICB9Ci1iYXNpY19qc29uX3BhcnNlcl81MDoKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6
cGFyc2VfZXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfQotYmFzaWNfanNvbl9wYXJzZXJfNTE6Ci0gICAgICAgICAgICAgICAgICAgIHl5
Y2ggPSAqKyttX2N1cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJywnKQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9
PSAnKycpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81OTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLScpCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290
byBiYXNpY19qc29uX3BhcnNlcl81OTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2Vy
XzMyOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHl5Y2ggPD0gJzknKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNjA7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFy
c2VyXzMyOwotICAgICAgICAgICAgICAgICAgICB9Ci1iYXNpY19qc29uX3BhcnNlcl81MjoKLSAg
ICAgICAgICAgICAgICAgICAgeXljaCA9ICorK21fY3Vyc29yOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoeXljaCA9PSAnbCcpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNjI7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKLWJhc2lj
X2pzb25fcGFyc2VyXzUzOgotICAgICAgICAgICAgICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID09ICdsJykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl82MzsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pz
b25fcGFyc2VyXzMyOwotYmFzaWNfanNvbl9wYXJzZXJfNTQ6Ci0gICAgICAgICAgICAgICAgICAg
IHl5Y2ggPSAqKyttX2N1cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ3Un
KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJh
c2ljX2pzb25fcGFyc2VyXzY0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7Ci1iYXNpY19qc29uX3BhcnNlcl81NToK
LSAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG1fbGltaXQgPD0gbV9jdXJzb3IpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbGxfbGluZV9idWZmZXIoMSk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCi0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgeXljaCA9ICptX2N1cnNv
cjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKQotICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNp
Y19qc29uX3BhcnNlcl8zMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh5eWNoIDw9ICc5JykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzY1Owot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBi
YXNpY19qc29uX3BhcnNlcl8zMjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICdGJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzY1OwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2An
KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnZicpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3Bh
cnNlcl82NTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfMzI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLWJh
c2ljX2pzb25fcGFyc2VyXzU2OgotICAgICAgICAgICAgICAgICAgICB5eWFjY2VwdCA9IDM7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fbWFya2VyID0gKyttX2N1cnNvcjsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKChtX2xpbWl0IC0gbV9jdXJzb3IpIDwgMykKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigzKTsgICAgLy8gTENP
Vl9FWENMX0xJTkUKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB5
eWNoID0gKm1fY3Vyc29yOwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRCcpCi0g
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9
ICcvJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzU4OwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKQotICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNv
bl9wYXJzZXJfNTY7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnRScpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3Bh
cnNlcl81MTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoID09ICdlJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzUxOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci1iYXNpY19qc29uX3BhcnNl
cl81ODoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbGFz
dF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6dmFsdWVfZmxvYXQ7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotYmFzaWNfanNvbl9wYXJzZXJf
NTk6Ci0gICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqKyttX2N1cnNvcjsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoID49ICc6JykKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3Bh
cnNlcl8zMjsKLSAgICAgICAgICAgICAgICAgICAgfQotYmFzaWNfanNvbl9wYXJzZXJfNjA6Ci0g
ICAgICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmICht
X2xpbWl0IDw9IG1fY3Vyc29yKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDEpOyAgICAvLyBMQ09WX0VYQ0xfTElORQotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81ODsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAn
OScpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFzaWNfanNvbl9wYXJzZXJfNjA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl81ODsKLWJhc2ljX2pzb25fcGFyc2VyXzYy
OgotICAgICAgICAgICAgICAgICAgICB5eWNoID0gKisrbV9jdXJzb3I7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICh5eWNoID09ICdzJykKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl82NjsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwot
YmFzaWNfanNvbl9wYXJzZXJfNjM6Ci0gICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqKyttX2N1
cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2wnKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2Vy
XzY3OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gYmFz
aWNfanNvbl9wYXJzZXJfMzI7Ci1iYXNpY19qc29uX3BhcnNlcl82NDoKLSAgICAgICAgICAgICAg
ICAgICAgeXljaCA9ICorK21fY3Vyc29yOwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA9
PSAnZScpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gYmFzaWNfanNvbl9wYXJzZXJfNjk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKLWJhc2ljX2pzb25fcGFyc2Vy
XzY1OgotICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOwotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9saW1pdCA8PSBtX2N1cnNvcikKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZmlsbF9saW5lX2J1ZmZlcigxKTsgICAgLy8gTENPVl9FWENMX0xJ
TkUKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB5eWNoID0gKm1f
Y3Vyc29yOwotICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnQCcpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICcvJykKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhc2ljX2pzb25fcGFyc2VyXzMyOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJzknKQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJf
NzE7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHl5Y2ggPD0gJ0YnKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJfNzE7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8
PSAnYCcpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdmJykKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pz
b25fcGFyc2VyXzcxOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMjsKLSAgICAgICAgICAgICAgICAgICAg
fQotYmFzaWNfanNvbl9wYXJzZXJfNjY6Ci0gICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqKytt
X2N1cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPT0gJ2UnKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFy
c2VyXzcyOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFzaWNfanNvbl9wYXJzZXJfMzI7Ci1iYXNpY19qc29uX3BhcnNlcl82NzoKLSAgICAgICAgICAg
ICAgICAgICAgKyttX2N1cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6bGl0ZXJhbF9udWxsOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLWJh
c2ljX2pzb25fcGFyc2VyXzY5OgotICAgICAgICAgICAgICAgICAgICArK21fY3Vyc29yOwotICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3Rva2VuX3R5
cGUgPSB0b2tlbl90eXBlOjpsaXRlcmFsX3RydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotYmFzaWNfanNvbl9wYXJzZXJfNzE6Ci0gICAg
ICAgICAgICAgICAgICAgICsrbV9jdXJzb3I7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2xp
bWl0IDw9IG1fY3Vyc29yKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBmaWxsX2xpbmVfYnVmZmVyKDEpOyAgICAvLyBMQ09WX0VYQ0xfTElORQotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHl5Y2ggPSAqbV9jdXJzb3I7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdAJykKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJy8nKQotICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNv
bl9wYXJzZXJfMzI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoeXljaCA8PSAnOScpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl83NDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNf
anNvbl9wYXJzZXJfMzI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoeXljaCA8PSAnRicpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl83NDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5eWNoIDw9ICdgJykKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGJhc2ljX2pzb25fcGFyc2VyXzMyOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2YnKQotICAgICAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFzaWNfanNvbl9wYXJzZXJf
NzQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBn
b3RvIGJhc2ljX2pzb25fcGFyc2VyXzMyOwotICAgICAgICAgICAgICAgICAgICB9Ci1iYXNpY19q
c29uX3BhcnNlcl83MjoKLSAgICAgICAgICAgICAgICAgICAgKyttX2N1cnNvcjsKLSAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF90b2tlbl90eXBlID0g
dG9rZW5fdHlwZTo6bGl0ZXJhbF9mYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB9Ci1iYXNpY19qc29uX3BhcnNlcl83NDoKLSAgICAgICAg
ICAgICAgICAgICAgKyttX2N1cnNvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fbGltaXQg
PD0gbV9jdXJzb3IpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbGxfbGluZV9idWZmZXIoMSk7ICAgIC8vIExDT1ZfRVhDTF9MSU5FCi0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgeXljaCA9ICptX2N1cnNvcjsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ0AnKQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnLycpCi0gICAgICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3Bh
cnNlcl8zMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh5eWNoIDw9ICc5JykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29u
X3BhcnNlcl8zMjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5
eWNoIDw9ICdGJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIGJhc2ljX2pzb25fcGFyc2VyXzMwOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHl5Y2ggPD0gJ2AnKQotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYmFz
aWNfanNvbl9wYXJzZXJfMzI7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoeXljaCA8PSAnZicpCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYXNpY19qc29uX3BhcnNlcl8zMDsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g
YmFzaWNfanNvbl9wYXJzZXJfMzI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGxhc3RfdG9rZW5f
dHlwZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIQotICAgICAgICBAYnJpZWYgYXBwZW5kIGRh
dGEgZnJvbSB0aGUgc3RyZWFtIHRvIHRoZSBsaW5lIGJ1ZmZlcgotCi0gICAgICAgIFRoaXMgZnVu
Y3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBzY2FuKCkgZnVuY3Rpb24gd2hlbiB0aGUgZW5kIG9mIHRo
ZQotICAgICAgICBidWZmZXIgKGBtX2xpbWl0YCkgaXMgcmVhY2hlZCBhbmQgdGhlIGBtX2N1cnNv
cmAgcG9pbnRlciBjYW5ub3QgYmUKLSAgICAgICAgaW5jcmVtZW50ZWQgd2l0aG91dCBsZWF2aW5n
IHRoZSBsaW1pdHMgb2YgdGhlIGxpbmUgYnVmZmVyLiBOb3RlIHJlMmMKLSAgICAgICAgZGVjaWRl
cyB3aGVuIHRvIGNhbGwgdGhpcyBmdW5jdGlvbi4KLQotICAgICAgICBJZiB0aGUgbGV4ZXIgcmVh
ZHMgZnJvbSBjb250aWd1b3VzIHN0b3JhZ2UsIHRoZXJlIGlzIG5vIHRyYWlsaW5nIG51bGwKLSAg
ICAgICAgYnl0ZS4gVGhlcmVmb3JlLCB0aGlzIGZ1bmN0aW9uIG11c3QgbWFrZSBzdXJlIHRvIGFk
ZCB0aGVzZSBwYWRkaW5nCi0gICAgICAgIG51bGwgYnl0ZXMuCi0KLSAgICAgICAgSWYgdGhlIGxl
eGVyIHJlYWRzIGZyb20gYW4gaW5wdXQgc3RyZWFtLCB0aGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBu
ZXh0Ci0gICAgICAgIGxpbmUgb2YgdGhlIGlucHV0LgotCi0gICAgICAgIEBwcmUKLSAgICAgICAg
ICAgIHAgcCBwIHAgcCBwIHUgdSB1IHUgdSB4IC4gLiAuIC4gLiAuCi0gICAgICAgICAgICBeICAg
ICAgICAgICBeICAgICAgIF4gICBeCi0gICAgICAgICAgICBtX2NvbnRlbnQgICBtX3N0YXJ0IHwg
ICBtX2xpbWl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3Vyc29yCi0KLSAg
ICAgICAgQHBvc3QKLSAgICAgICAgICAgIHUgdSB1IHUgdSB4IHggeCB4IHggeCB4IC4gLiAuIC4g
LiAuCi0gICAgICAgICAgICBeICAgICAgIF4gICAgICAgICAgICAgICBeCi0gICAgICAgICAgICB8
ICAgICAgIG1fY3Vyc29yICAgICAgICBtX2xpbWl0Ci0gICAgICAgICAgICBtX3N0YXJ0Ci0gICAg
ICAgICAgICBtX2NvbnRlbnQKLSAgICAgICAgKi8KLSAgICAgICAgdm9pZCBmaWxsX2xpbmVfYnVm
ZmVyKHNpemVfdCBuID0gMCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gaWYgbGluZSBidWZm
ZXIgaXMgdXNlZCwgbV9jb250ZW50IHBvaW50cyB0byBpdHMgZGF0YQotICAgICAgICAgICAgYXNz
ZXJ0KG1fbGluZV9idWZmZXIuZW1wdHkoKQotICAgICAgICAgICAgICAgICAgIG9yIG1fY29udGVu
dCA9PSByZWludGVycHJldF9jYXN0PGNvbnN0IGxleGVyX2NoYXJfdCo+KG1fbGluZV9idWZmZXIu
ZGF0YSgpKSk7Ci0KLSAgICAgICAgICAgIC8vIGlmIGxpbmUgYnVmZmVyIGlzIHVzZWQsIG1fbGlt
aXQgaXMgc2V0IHBhc3QgdGhlIGVuZCBvZiBpdHMgZGF0YQotICAgICAgICAgICAgYXNzZXJ0KG1f
bGluZV9idWZmZXIuZW1wdHkoKQotICAgICAgICAgICAgICAgICAgIG9yIG1fbGltaXQgPT0gbV9j
b250ZW50ICsgbV9saW5lX2J1ZmZlci5zaXplKCkpOwotCi0gICAgICAgICAgICAvLyBwb2ludGVy
IHJlbGF0aW9uc2hpcHMKLSAgICAgICAgICAgIGFzc2VydChtX2NvbnRlbnQgPD0gbV9zdGFydCk7
Ci0gICAgICAgICAgICBhc3NlcnQobV9zdGFydCA8PSBtX2N1cnNvcik7Ci0gICAgICAgICAgICBh
c3NlcnQobV9jdXJzb3IgPD0gbV9saW1pdCk7Ci0gICAgICAgICAgICBhc3NlcnQobV9tYXJrZXIg
PT0gbnVsbHB0ciBvciBtX21hcmtlciAgPD0gbV9saW1pdCk7Ci0KLSAgICAgICAgICAgIC8vIG51
bWJlciBvZiBwcm9jZXNzZWQgY2hhcmFjdGVycyAocCkKLSAgICAgICAgICAgIGNvbnN0IGF1dG8g
bnVtX3Byb2Nlc3NlZF9jaGFycyA9IHN0YXRpY19jYXN0PHNpemVfdD4obV9zdGFydCAtIG1fY29u
dGVudCk7Ci0gICAgICAgICAgICAvLyBvZmZzZXQgZm9yIG1fbWFya2VyIHdydC4gdG8gbV9zdGFy
dAotICAgICAgICAgICAgY29uc3QgYXV0byBvZmZzZXRfbWFya2VyID0gKG1fbWFya2VyID09IG51
bGxwdHIpID8gMCA6IG1fbWFya2VyIC0gbV9zdGFydDsKLSAgICAgICAgICAgIC8vIG51bWJlciBv
ZiB1bnByb2Nlc3NlZCBjaGFyYWN0ZXJzICh1KQotICAgICAgICAgICAgY29uc3QgYXV0byBvZmZz
ZXRfY3Vyc29yID0gbV9jdXJzb3IgLSBtX3N0YXJ0OwotCi0gICAgICAgICAgICAvLyBubyBzdHJl
YW0gaXMgdXNlZCBvciBlbmQgb2YgZmlsZSBpcyByZWFjaGVkCi0gICAgICAgICAgICBpZiAobV9z
dHJlYW0gPT0gbnVsbHB0ciBvciBtX3N0cmVhbS0+ZW9mKCkpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgLy8gbV9zdGFydCBtYXkgb3IgbWF5IG5vdCBiZSBwb2ludGluZyBpbnRvIG1f
bGluZV9idWZmZXIgYXQKLSAgICAgICAgICAgICAgICAvLyB0aGlzIHBvaW50LiBXZSB0cnVzdCB0
aGUgc3RhbmRhcmQgbGlicmFyeSB0byBkbyB0aGUgcmlnaHQKLSAgICAgICAgICAgICAgICAvLyB0
aGluZy4gU2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xLzI4MTQyMDExLzI2NjM3OAotICAg
ICAgICAgICAgICAgIG1fbGluZV9idWZmZXIuYXNzaWduKG1fc3RhcnQsIG1fbGltaXQpOwotCi0g
ICAgICAgICAgICAgICAgLy8gYXBwZW5kIG4gY2hhcmFjdGVycyB0byBtYWtlIHN1cmUgdGhhdCB0
aGVyZSBpcyBzdWZmaWNpZW50Ci0gICAgICAgICAgICAgICAgLy8gc3BhY2UgYmV0d2VlbiBtX2N1
cnNvciBhbmQgbV9saW1pdAotICAgICAgICAgICAgICAgIG1fbGluZV9idWZmZXIuYXBwZW5kKDEs
ICdceDAwJyk7Ci0gICAgICAgICAgICAgICAgaWYgKG4gPiAwKQotICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgbV9saW5lX2J1ZmZlci5hcHBlbmQobiAtIDEsICdceDAxJyk7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSBwcm9jZXNzZWQgY2hhcmFjdGVy
cyBmcm9tIGxpbmUgYnVmZmVyCi0gICAgICAgICAgICAgICAgbV9saW5lX2J1ZmZlci5lcmFzZSgw
LCBudW1fcHJvY2Vzc2VkX2NoYXJzKTsKLSAgICAgICAgICAgICAgICAvLyByZWFkIG5leHQgbGlu
ZSBmcm9tIGlucHV0IHN0cmVhbQotICAgICAgICAgICAgICAgIG1fbGluZV9idWZmZXJfdG1wLmNs
ZWFyKCk7Ci0gICAgICAgICAgICAgICAgc3RkOjpnZXRsaW5lKCptX3N0cmVhbSwgbV9saW5lX2J1
ZmZlcl90bXAsICdcbicpOwotCi0gICAgICAgICAgICAgICAgLy8gYWRkIGxpbmUgd2l0aCBuZXds
aW5lIHN5bWJvbCB0byB0aGUgbGluZSBidWZmZXIKLSAgICAgICAgICAgICAgICBtX2xpbmVfYnVm
ZmVyICs9IG1fbGluZV9idWZmZXJfdG1wOwotICAgICAgICAgICAgICAgIG1fbGluZV9idWZmZXIu
cHVzaF9iYWNrKCdcbicpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBzZXQgcG9p
bnRlcnMKLSAgICAgICAgICAgIG1fY29udGVudCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgbGV4
ZXJfY2hhcl90Kj4obV9saW5lX2J1ZmZlci5kYXRhKCkpOwotICAgICAgICAgICAgYXNzZXJ0KG1f
Y29udGVudCAhPSBudWxscHRyKTsKLSAgICAgICAgICAgIG1fc3RhcnQgID0gbV9jb250ZW50Owot
ICAgICAgICAgICAgbV9tYXJrZXIgPSBtX3N0YXJ0ICsgb2Zmc2V0X21hcmtlcjsKLSAgICAgICAg
ICAgIG1fY3Vyc29yID0gbV9zdGFydCArIG9mZnNldF9jdXJzb3I7Ci0gICAgICAgICAgICBtX2xp
bWl0ICA9IG1fc3RhcnQgKyBtX2xpbmVfYnVmZmVyLnNpemUoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vLyByZXR1cm4gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGxhc3QgcmVhZCB0b2tlbgot
ICAgICAgICBzdHJpbmdfdCBnZXRfdG9rZW5fc3RyaW5nKCkgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgYXNzZXJ0KG1fc3RhcnQgIT0gbnVsbHB0cik7Ci0gICAgICAgICAgICByZXR1cm4g
c3RyaW5nX3QocmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6Y29uc3RfcG9pbnRl
cj4obV9zdGFydCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX2N1cnNvciAtIG1fc3RhcnQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIQotICAg
ICAgICBAYnJpZWYgcmV0dXJuIHN0cmluZyB2YWx1ZSBmb3Igc3RyaW5nIHRva2VucwotCi0gICAg
ICAgIFRoZSBmdW5jdGlvbiBpdGVyYXRlcyB0aGUgY2hhcmFjdGVycyBiZXR3ZWVuIHRoZSBvcGVu
aW5nIGFuZCBjbG9zaW5nCi0gICAgICAgIHF1b3RlcyBvZiB0aGUgc3RyaW5nIHZhbHVlLiBUaGUg
Y29tcGxldGUgc3RyaW5nIGlzIHRoZSByYW5nZQotICAgICAgICBbbV9zdGFydCxtX2N1cnNvciku
IENvbnNlcXVlbnRseSwgd2UgaXRlcmF0ZSBmcm9tIG1fc3RhcnQrMSB0bwotICAgICAgICBtX2N1
cnNvci0xLgotCi0gICAgICAgIFdlIGRpZmZlcmVudGlhdGUgdHdvIGNhc2VzOgotCi0gICAgICAg
IDEuIEVzY2FwZWQgY2hhcmFjdGVycy4gSW4gdGhpcyBjYXNlLCBhIG5ldyBjaGFyYWN0ZXIgaXMg
Y29uc3RydWN0ZWQKLSAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBuYXR1cmUgb2YgdGhlIGVz
Y2FwZS4gU29tZSBlc2NhcGVzIGNyZWF0ZSBuZXcKLSAgICAgICAgICAgY2hhcmFjdGVycyAoZS5n
LiwgYCJcXG4iYCBpcyByZXBsYWNlZCBieSBgIlxuImApLCBzb21lIGFyZSBjb3BpZWQKLSAgICAg
ICAgICAgYXMgaXMgKGUuZy4sIGAiXFxcXCJgKS4gRnVydGhlcm1vcmUsIFVuaWNvZGUgZXNjYXBl
cyBvZiB0aGUgc2hhcGUKLSAgICAgICAgICAgYCJcXHV4eHh4ImAgbmVlZCBzcGVjaWFsIGNhcmUu
IEluIHRoaXMgY2FzZSwgdG9fdW5pY29kZSB0YWtlcyBjYXJlCi0gICAgICAgICAgIG9mIHRoZSBj
b25zdHJ1Y3Rpb24gb2YgdGhlIHZhbHVlcy4KLSAgICAgICAgMi4gVW5lc2NhcGVkIGNoYXJhY3Rl
cnMgYXJlIGNvcGllZCBhcyBpcy4KLQotICAgICAgICBAcHJlIGBtX2N1cnNvciAtIG1fc3RhcnQg
Pj0gMmAsIG1lYW5pbmcgdGhlIGxlbmd0aCBvZiB0aGUgbGFzdCB0b2tlbgotICAgICAgICBpcyBh
dCBsZWFzdCAyIGJ5dGVzIHdoaWNoIGlzIHRyaXZpYWxseSB0cnVlIGZvciBhbnkgc3RyaW5nICh3
aGljaAotICAgICAgICBjb25zaXN0cyBvZiBhdCBsZWFzdCB0d28gcXVvdGVzKS4KLQotICAgICAg
ICAgICAgIiBjMSBjMiBjMyAuLi4gIgotICAgICAgICAgICAgXiAgICAgICAgICAgICAgICBeCi0g
ICAgICAgICAgICBtX3N0YXJ0ICAgICAgICAgIG1fY3Vyc29yCi0KLSAgICAgICAgQGNvbXBsZXhp
dHkgTGluZWFyIGluIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy5cbgotCi0gICAgICAgIExlbW1h
OiBUaGUgbG9vcCBib2R5IHdpbGwgYWx3YXlzIHRlcm1pbmF0ZS5cbgotCi0gICAgICAgIFByb29m
IChieSBjb250cmFkaWN0aW9uKTogQXNzdW1lIHRoZSBsb29wIGJvZHkgZG9lcyBub3QgdGVybWlu
YXRlLiBBcwotICAgICAgICB0aGUgbG9vcCBib2R5IGRvZXMgbm90IGNvbnRhaW4gYW5vdGhlciBs
b29wLCBvbmUgb2YgdGhlIGNhbGxlZAotICAgICAgICBmdW5jdGlvbnMgbXVzdCBuZXZlciByZXR1
cm4uIFRoZSBjYWxsZWQgZnVuY3Rpb25zIGFyZSBgc3RkOjpzdHJ0b3VsYAotICAgICAgICBhbmQg
dG9fdW5pY29kZS4gTmVpdGhlciBmdW5jdGlvbiBjYW4gbG9vcCBmb3JldmVyLCBzbyB0aGUgbG9v
cCBib2R5Ci0gICAgICAgIHdpbGwgbmV2ZXIgbG9vcCBmb3JldmVyIHdoaWNoIGNvbnRyYWRpY3Rz
IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGxvb3AKLSAgICAgICAgYm9keSBkb2VzIG5vdCB0ZXJt
aW5hdGUsIHEuZS5kLlxuCi0KLSAgICAgICAgTGVtbWE6IFRoZSBsb29wIGNvbmRpdGlvbiBmb3Ig
dGhlIGZvciBsb29wIGlzIGV2ZW50dWFsbHkgZmFsc2UuXG4KLQotICAgICAgICBQcm9vZiAoYnkg
Y29udHJhZGljdGlvbik6IEFzc3VtZSB0aGUgbG9vcCBkb2VzIG5vdCB0ZXJtaW5hdGUuIER1ZSB0
bwotICAgICAgICB0aGUgYWJvdmUgbGVtbWEsIHRoaXMgY2FuIG9ubHkgYmUgZHVlIHRvIGEgdGF1
dG9sb2dpY2FsIGxvb3AKLSAgICAgICAgY29uZGl0aW9uOyB0aGF0IGlzLCB0aGUgbG9vcCBjb25k
aXRpb24gaSA8IG1fY3Vyc29yIC0gMSBtdXN0IGFsd2F5cyBiZQotICAgICAgICB0cnVlLiBMZXQg
eCBiZSB0aGUgY2hhbmdlIG9mIGkgZm9yIGFueSBsb29wIGl0ZXJhdGlvbi4gVGhlbgotICAgICAg
ICBtX3N0YXJ0ICsgMSArIHggPCBtX2N1cnNvciAtIDEgbXVzdCBob2xkIHRvIGxvb3AgaW5kZWZp
bml0ZWx5LiBUaGlzCi0gICAgICAgIGNhbiBiZSByZXBocmFzZWQgdG8gbV9jdXJzb3IgLSBtX3N0
YXJ0IC0gMiA+IHguIFdpdGggdGhlCi0gICAgICAgIHByZWNvbmRpdGlvbiwgd2UgeCA8PSAwLCBt
ZWFuaW5nIHRoYXQgdGhlIGxvb3AgY29uZGl0aW9uIGhvbGRzCi0gICAgICAgIGluZGVmaW5pdGVs
eSBpZiBpIGlzIGFsd2F5cyBkZWNyZWFzZWQuIEhvd2V2ZXIsIG9ic2VydmUgdGhhdCB0aGUgdmFs
dWUKLSAgICAgICAgb2YgaSBpcyBzdHJpY3RseSBpbmNyZWFzaW5nIHdpdGggZWFjaCBpdGVyYXRp
b24sIGFzIGl0IGlzIGluY3JlbWVudGVkCi0gICAgICAgIGJ5IDEgaW4gdGhlIGl0ZXJhdGlvbiBl
eHByZXNzaW9uIGFuZCBuZXZlciBkZWNyZW1lbnRlZCBpbnNpZGUgdGhlIGxvb3AKLSAgICAgICAg
Ym9keS4gSGVuY2UsIHRoZSBsb29wIGNvbmRpdGlvbiB3aWxsIGV2ZW50dWFsbHkgYmUgZmFsc2Ug
d2hpY2gKLSAgICAgICAgY29udHJhZGljdHMgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgbG9vcCBj
b25kaXRpb24gaXMgYSB0YXV0b2xvZ3ksCi0gICAgICAgIHEuZS5kLgotCi0gICAgICAgIEByZXR1
cm4gc3RyaW5nIHZhbHVlIG9mIGN1cnJlbnQgdG9rZW4gd2l0aG91dCBvcGVuaW5nIGFuZCBjbG9z
aW5nCi0gICAgICAgIHF1b3RlcwotICAgICAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2UgaWYg
dG9fdW5pY29kZSBmYWlscwotICAgICAgICAqLwotICAgICAgICBzdHJpbmdfdCBnZXRfc3RyaW5n
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgYXNzZXJ0KG1fY3Vyc29yIC0gbV9zdGFy
dCA+PSAyKTsKLQotICAgICAgICAgICAgc3RyaW5nX3QgcmVzdWx0OwotICAgICAgICAgICAgcmVz
dWx0LnJlc2VydmUoc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2N1cnNvciAtIG1fc3RhcnQgLSAyKSk7
Ci0KLSAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhlIHJlc3VsdCBiZXR3ZWVuIHRoZSBxdW90ZXMK
LSAgICAgICAgICAgIGZvciAoY29uc3QgbGV4ZXJfY2hhcl90KiBpID0gbV9zdGFydCArIDE7IGkg
PCBtX2N1cnNvciAtIDE7ICsraSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBm
aW5kIG5leHQgZXNjYXBlIGNoYXJhY3RlcgotICAgICAgICAgICAgICAgIGF1dG8gZSA9IHN0ZDo6
ZmluZChpLCBtX2N1cnNvciAtIDEsICdcXCcpOwotICAgICAgICAgICAgICAgIGlmIChlICE9IGkp
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly9n
aXRodWIuY29tL25sb2htYW5uL2pzb24vaXNzdWVzLzM2NSNpc3N1ZWNvbW1lbnQtMjYyODc0NzA1
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBrID0gaTsgayA8IGU7IGsrKykKLSAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2hfYmFj
ayhzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6dmFsdWVfdHlwZT4oKmspKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpID0gZSAtIDE7IC8vIC0xIGJl
Y2F1c2Ugb2YgKytpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIHByb2Nlc3NpbmcgZXNjYXBl
ZCBjaGFyYWN0ZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBuZXh0IGNoYXJhY3Rlcgot
ICAgICAgICAgICAgICAgICAgICArK2k7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgq
aSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhl
IGRlZmF1bHQgZXNjYXBlcwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ICs9ICJcdCI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gIlxiIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSAiXGYiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9
ICJcbiI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyJzoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0g
IlxyIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0g
IlxcIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy8nOgotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAi
LyI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICciJzoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIlwi
IjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdW5pY29kZQotICAgICAgICAg
ICAgICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IGNvZGUgeHh4eCBmcm9tIHV4eHh4Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBjb2RlcG9pbnQgPSBzdGQ6OnN0cnRvdWwoc3Rk
OjpzdHJpbmcocmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBzdHJpbmdfdDo6Y29uc3RfcG9pbnRl
cj4oaSArIDEpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDQpLmNfc3RyKCksIG51bGxwdHIsIDE2KTsKLQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGNoZWNrIGlmIGNvZGVwb2ludCBpcyBhIGhpZ2ggc3Vycm9nYXRlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVwb2ludCA+PSAweEQ4MDAgYW5kIGNv
ZGVwb2ludCA8PSAweERCRkYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlcmUgaXMgYSBzdWJzZXF1
ZW50IHVuaWNvZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpICsgNiA+
PSBtX2xpbWl0KSBvciAqIChpICsgNSkgIT0gJ1xcJyBvciAqIChpICsgNikgIT0gJ3UnKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBKU09OX1RIUk9XKHN0ZDo6aW52YWxpZF9hcmd1bWVudCgibWlzc2luZyBsb3cg
c3Vycm9nYXRlIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IGNvZGUgeXl5eSBmcm9tIHV4eHh4XHV5
eXl5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gY29kZXBvaW50MiA9IHN0
ZDo6c3RydG91bChzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PHR5cGVuYW1lIHN0cmluZ190
Ojpjb25zdF9wb2ludGVyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGkgKyA3KSwgNCkuY19zdHIoKSwgbnVsbHB0ciwgMTYp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gdG9fdW5pY29kZShj
b2RlcG9pbnQsIGNvZGVwb2ludDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBza2lwIHRoZSBuZXh0IDEwIGNoYXJhY3RlcnMgKHh4eHhcdXl5eXkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGkgKz0gMTA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvZGVwb2ludCA+PSAweERD
MDAgYW5kIGNvZGVwb2ludCA8PSAweERGRkYpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBmb3VuZCBhIGxvbmUgbG93
IHN1cnJvZ2F0ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OX1RIUk9XKHN0
ZDo6aW52YWxpZF9hcmd1bWVudCgibWlzc2luZyBoaWdoIHN1cnJvZ2F0ZSIpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYWRkIHVuaWNvZGUgY2hhcmFjdGVyKHMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSB0b191bmljb2RlKGNvZGVwb2ludCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHNraXAgdGhlIG5leHQgZm91ciBjaGFyYWN0ZXJzICh4eHh4
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDQ7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
ICAgICB9Ci0KLQotICAgICAgICAvKiEKLSAgICAgICAgQGJyaWVmIHBhcnNlIHN0cmluZyBpbnRv
IGEgYnVpbHQtaW4gYXJpdGhtZXRpYyB0eXBlIGFzIGlmIHRoZSBjdXJyZW50Ci0gICAgICAgICAg
ICAgICBsb2NhbGUgaXMgUE9TSVguCi0KLSAgICAgICAgQG5vdGUgaW4gZmxvYXRpbmctcG9pbnQg
Y2FzZSBzdHJ0b2QgbWF5IHBhcnNlIHBhc3QgdGhlIHRva2VuJ3MgZW5kIC0KLSAgICAgICAgICAg
ICAgdGhpcyBpcyBub3QgYW4gZXJyb3IKLQotICAgICAgICBAbm90ZSBhbnkgbGVhZGluZyBibGFu
a3MgYXJlIG5vdCBoYW5kbGVkCi0gICAgICAgICovCi0gICAgICAgIHN0cnVjdCBzdHJ0b251bQot
ICAgICAgICB7Ci0gICAgICAgICAgcHVibGljOgotICAgICAgICAgICAgc3RydG9udW0oY29uc3Qg
Y2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCkKLSAgICAgICAgICAgICAgICA6IG1fc3RhcnQo
c3RhcnQpLCBtX2VuZChlbmQpCi0gICAgICAgICAgICB7fQotCi0gICAgICAgICAgICAvKiEKLSAg
ICAgICAgICAgIEByZXR1cm4gdHJ1ZSBpZmYgcGFyc2VkIHN1Y2Nlc3NmdWxseSBhcyBudW1iZXIg
b2YgdHlwZSBUCi0KLSAgICAgICAgICAgIEBwYXJhbVtpbixvdXRdIHZhbCBzaGFsbCBjb250YWlu
IHBhcnNlZCB2YWx1ZSwgb3IgdW5kZWZpbmVkIHZhbHVlCi0gICAgICAgICAgICBpZiBjb3VsZCBu
b3QgcGFyc2UKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfYXJpdGhtZXRpYzxU
Pjo6dmFsdWU+Ojp0eXBlPgotICAgICAgICAgICAgYm9vbCB0byhUJiB2YWwpIGNvbnN0Ci0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlKHZhbCwgc3RkOjppc19pbnRl
Z3JhbDxUPigpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgIHByaXZhdGU6Ci0gICAgICAg
ICAgICBjb25zdCBjaGFyKiBjb25zdCBtX3N0YXJ0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGNv
bnN0IGNoYXIqIGNvbnN0IG1fZW5kID0gbnVsbHB0cjsKLQotICAgICAgICAgICAgLy8gZmxvYXRp
bmctcG9pbnQgY29udmVyc2lvbgotCi0gICAgICAgICAgICAvLyBvdmVybG9hZGVkIHdyYXBwZXJz
IGZvciBzdHJ0b2Qvc3RydG9mL3N0cnRvbGQKLSAgICAgICAgICAgIC8vIHRoYXQgd2lsbCBiZSBj
YWxsZWQgZnJvbSBwYXJzZTxmbG9hdGluZ19wb2ludF90PgotICAgICAgICAgICAgc3RhdGljIHZv
aWQgc3RydG9mKGZsb2F0JiBmLCBjb25zdCBjaGFyKiBzdHIsIGNoYXIqKiBlbmRwdHIpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZiA9IHN0ZDo6c3RydG9mKHN0ciwgZW5kcHRyKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RhdGljIHZvaWQgc3RydG9mKGRvdWJsZSYg
ZiwgY29uc3QgY2hhciogc3RyLCBjaGFyKiogZW5kcHRyKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGYgPSBzdGQ6OnN0cnRvZChzdHIsIGVuZHB0cik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHN0YXRpYyB2b2lkIHN0cnRvZihsb25nIGRvdWJsZSYgZiwgY29uc3QgY2hh
ciogc3RyLCBjaGFyKiogZW5kcHRyKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGYg
PSBzdGQ6OnN0cnRvbGQoc3RyLCBlbmRwdHIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICAgICAgYm9vbCBwYXJzZShUJiB2YWx1ZSwg
Lyppc19pbnRlZ3JhbD0qL3N0ZDo6ZmFsc2VfdHlwZSkgY29uc3QKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyByZXBsYWNlIGRlY2ltYWwgc2VwYXJhdG9yIHdpdGggbG9jYWxlLXNw
ZWNpZmljIHZlcnNpb24sCi0gICAgICAgICAgICAgICAgLy8gd2hlbiBuZWNlc3Nhcnk7IGRhdGEg
d2lsbCBwb2ludCB0byBlaXRoZXIgdGhlIG9yaWdpbmFsCi0gICAgICAgICAgICAgICAgLy8gc3Ry
aW5nLCBvciBidWYsIG9yIHRlbXBzdHIgY29udGFpbmluZyB0aGUgZml4ZWQgc3RyaW5nLgotICAg
ICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHRlbXBzdHI7Ci0gICAgICAgICAgICAgICAgc3RkOjph
cnJheTxjaGFyLCA2ND4gYnVmOwotICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBsZW4gPSBz
dGF0aWNfY2FzdDxzaXplX3Q+KG1fZW5kIC0gbV9zdGFydCk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBsZXhlciB3aWxsIHJlamVjdCBlbXB0eSBudW1iZXJzCi0gICAgICAgICAgICAgICAgYXNzZXJ0
KGxlbiA+IDApOwotCi0gICAgICAgICAgICAgICAgLy8gc2luY2UgZGVhbGluZyB3aXRoIHN0cnRv
ZCBmYW1pbHkgb2YgZnVuY3Rpb25zLCB3ZSdyZQotICAgICAgICAgICAgICAgIC8vIGdldHRpbmcg
dGhlIGRlY2ltYWwgcG9pbnQgY2hhciBmcm9tIHRoZSBDIGxvY2FsZSBmYWNpbGl0aWVzCi0gICAg
ICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBDKysncyBudW1wdW5jdCBmYWNldCBvZiB0aGUgY3Vy
cmVudCBzdGQ6OmxvY2FsZQotICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gbG9jID0gbG9jYWxl
Y29udigpOwotICAgICAgICAgICAgICAgIGFzc2VydChsb2MgIT0gbnVsbHB0cik7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgY2hhciBkZWNpbWFsX3BvaW50X2NoYXIgPSAobG9jLT5kZWNpbWFsX3Bv
aW50ID09IG51bGxwdHIpID8gJy4nIDogbG9jLT5kZWNpbWFsX3BvaW50WzBdOwotCi0gICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogZGF0YSA9IG1fc3RhcnQ7Ci0KLSAgICAgICAgICAgICAgICBp
ZiAoZGVjaW1hbF9wb2ludF9jaGFyICE9ICcuJykKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBkc19wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0
ZDo6ZmluZChtX3N0YXJ0LCBtX2VuZCwgJy4nKSAtIG1fc3RhcnQpOwotCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChkc19wb3MgIT0gbGVuKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBjb3B5IHRoZSBkYXRhIGludG8gdGhlIGxvY2FsIGJ1ZmZlciBv
ciB0ZW1wc3RyLCBpZgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnVmZmVyIGlzIHRvbyBz
bWFsbDsgcmVwbGFjZSBkZWNpbWFsIHNlcGFyYXRvciwgYW5kCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyB1cGRhdGUgZGF0YSB0byBwb2ludCB0byB0aGUgbW9kaWZpZWQgYnl0ZXMKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICgobGVuICsgMSkgPCBidWYuc2l6ZSgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6Y29weSht
X3N0YXJ0LCBtX2VuZCwgYnVmLmJlZ2luKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ1ZltsZW5dID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZbZHNfcG9zXSA9
IGRlY2ltYWxfcG9pbnRfY2hhcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0g
YnVmLmRhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZW1wc3RyLmFzc2lnbihtX3N0YXJ0LCBtX2VuZCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGVtcHN0cltkc19wb3NdID0gZGVjaW1hbF9wb2ludF9jaGFyOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSB0ZW1wc3RyLmNfc3RyKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBjaGFyKiBlbmRwdHIgPSBudWxscHRyOwotICAgICAgICAg
ICAgICAgIHZhbHVlID0gMDsKLSAgICAgICAgICAgICAgICAvLyB0aGlzIGNhbGxzIGFwcHJvcHJp
YXRlIG92ZXJsb2FkIGRlcGVuZGluZyBvbiBUCi0gICAgICAgICAgICAgICAgc3RydG9mKHZhbHVl
LCBkYXRhLCAmZW5kcHRyKTsKLQotICAgICAgICAgICAgICAgIC8vIHBhcnNpbmcgd2FzIHN1Y2Nl
c3NmdWwgaWZmIHN0cnRvZiBwYXJzZWQgZXhhY3RseSB0aGUgbnVtYmVyCi0gICAgICAgICAgICAg
ICAgLy8gb2YgY2hhcmFjdGVycyBkZXRlcm1pbmVkIGJ5IHRoZSBsZXhlciAobGVuKQotICAgICAg
ICAgICAgICAgIGNvbnN0IGJvb2wgb2sgPSAoZW5kcHRyID09IChkYXRhICsgbGVuKSk7Ci0KLSAg
ICAgICAgICAgICAgICBpZiAob2sgYW5kICh2YWx1ZSA9PSBzdGF0aWNfY2FzdDxUPigwLjApKSBh
bmQgKCpkYXRhID09ICctJykpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAvLyBzb21lIGltcGxlbWVudGF0aW9ucyBmb3JnZXQgdG8gbmVnYXRlIHRoZSB6ZXJvCi0gICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gLTAuMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gb2s7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGlu
dGVncmFsIGNvbnZlcnNpb24KLQotICAgICAgICAgICAgc2lnbmVkIGxvbmcgbG9uZyBwYXJzZV9p
bnRlZ3JhbChjaGFyKiogZW5kcHRyLCAvKmlzX3NpZ25lZCovc3RkOjp0cnVlX3R5cGUpIGNvbnN0
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RydG9sbChtX3N0
YXJ0LCBlbmRwdHIsIDEwKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBsb25nIHBhcnNlX2ludGVncmFsKGNoYXIqKiBlbmRwdHIsIC8qaXNfc2lnbmVkKi9zdGQ6
OmZhbHNlX3R5cGUpIGNvbnN0Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6c3RydG91bGwobV9zdGFydCwgZW5kcHRyLCAxMCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgICAgICBib29sIHBhcnNlKFQm
IHZhbHVlLCAvKmlzX2ludGVncmFsPSovc3RkOjp0cnVlX3R5cGUpIGNvbnN0Ci0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgY2hhciogZW5kcHRyID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICBlcnJubyA9IDA7IC8vIHRoZXNlIGFyZSB0aHJlYWQtbG9jYWwKLSAgICAgICAgICAgICAg
ICBjb25zdCBhdXRvIHggPSBwYXJzZV9pbnRlZ3JhbCgmZW5kcHRyLCBzdGQ6OmlzX3NpZ25lZDxU
PigpKTsKLQotICAgICAgICAgICAgICAgIC8vIGNhbGxlZCByaWdodCBvdmVybG9hZD8KLSAgICAg
ICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2lnbmVkPFQ+KCkgPT0gc3RkOjppc19z
aWduZWQ8ZGVjbHR5cGUoeCk+KCksICIiKTsKLQotICAgICAgICAgICAgICAgIHZhbHVlID0gc3Rh
dGljX2Nhc3Q8VD4oeCk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gKHggPT0gc3RhdGljX2Nh
c3Q8ZGVjbHR5cGUoeCk+KHZhbHVlKSkgLy8geCBmaXRzIGludG8gZGVzdGluYXRpb24gVAotICAg
ICAgICAgICAgICAgICAgICAgICBhbmQgKHggPCAwKSA9PSAodmFsdWUgPCAwKSAgICAgICAgICAg
ICAvLyBwcmVzZXJ2ZWQgc2lnbgotICAgICAgICAgICAgICAgICAgICAgICAvL2FuZCAoKHggIT0g
MCkgb3IgaXNfaW50ZWdyYWwoKSkgICAgICAgIC8vIHN0cnRvW3VdbGwgZGlkIG50byBmYWlsCi0g
ICAgICAgICAgICAgICAgICAgICAgIGFuZCAoZXJybm8gPT0gMCkgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHN0cnRvW3VdbGwgZGlkIG5vdCBvdmVyZmxvdwotICAgICAgICAgICAgICAgICAgICAg
ICBhbmQgKG1fc3RhcnQgPCBtX2VuZCkgICAgICAgICAgICAgICAgICAvLyB0b2tlbiB3YXMgbm90
IGVtcHR5Ci0gICAgICAgICAgICAgICAgICAgICAgIGFuZCAoZW5kcHRyID09IG1fZW5kKTsgICAg
ICAgICAgICAgICAgIC8vIHBhcnNlZCBlbnRpcmUgdG9rZW4gZXhhY3RseQotICAgICAgICAgICAg
fQotICAgICAgICB9OwotCi0gICAgICAgIC8qIQotICAgICAgICBAYnJpZWYgcmV0dXJuIG51bWJl
ciB2YWx1ZSBmb3IgbnVtYmVyIHRva2VucwotCi0gICAgICAgIFRoaXMgZnVuY3Rpb24gdHJhbnNs
YXRlcyB0aGUgbGFzdCB0b2tlbiBpbnRvIHRoZSBtb3N0IGFwcHJvcHJpYXRlCi0gICAgICAgIG51
bWJlciB0eXBlIChlaXRoZXIgaW50ZWdlciwgdW5zaWduZWQgaW50ZWdlciBvciBmbG9hdGluZyBw
b2ludCksCi0gICAgICAgIHdoaWNoIGlzIHBhc3NlZCBiYWNrIHRvIHRoZSBjYWxsZXIgdmlhIHRo
ZSByZXN1bHQgcGFyYW1ldGVyLgotCi0gICAgICAgIGludGVncmFsIG51bWJlcnMgdGhhdCBkb24n
dCBmaXQgaW50byB0aGUgcmFuZ2Ugb2YgdGhlIHJlc3BlY3RpdmUKLSAgICAgICAgdHlwZSBhcmUg
cGFyc2VkIGFzIG51bWJlcl9mbG9hdF90Ci0KLSAgICAgICAgZmxvYXRpbmctcG9pbnQgdmFsdWVz
IGRvIG5vdCBzYXRpc2Z5IHN0ZDo6aXNmaW5pdGUgcHJlZGljYXRlCi0gICAgICAgIGFyZSBjb252
ZXJ0ZWQgdG8gdmFsdWVfdDo6bnVsbAotCi0gICAgICAgIHRocm93cyBpZiB0aGUgZW50aXJlIHN0
cmluZyBbbV9zdGFydCAuLiBtX2N1cnNvcikgY2Fubm90IGJlCi0gICAgICAgIGludGVycHJldGVk
IGFzIGEgbnVtYmVyCi0KLSAgICAgICAgQHBhcmFtW291dF0gcmVzdWx0ICBAcmVmIGJhc2ljX2pz
b24gb2JqZWN0IHRvIHJlY2VpdmUgdGhlIG51bWJlci4KLSAgICAgICAgQHBhcmFtW2luXSAgdG9r
ZW4gICB0aGUgdHlwZSBvZiB0aGUgbnVtYmVyIHRva2VuCi0gICAgICAgICovCi0gICAgICAgIGJv
b2wgZ2V0X251bWJlcihiYXNpY19qc29uJiByZXN1bHQsIGNvbnN0IHRva2VuX3R5cGUgdG9rZW4p
IGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGFzc2VydChtX3N0YXJ0ICE9IG51bGxwdHIp
OwotICAgICAgICAgICAgYXNzZXJ0KG1fc3RhcnQgPCBtX2N1cnNvcik7Ci0gICAgICAgICAgICBh
c3NlcnQoKHRva2VuID09IHRva2VuX3R5cGU6OnZhbHVlX3Vuc2lnbmVkKSBvcgotICAgICAgICAg
ICAgICAgICAgICh0b2tlbiA9PSB0b2tlbl90eXBlOjp2YWx1ZV9pbnRlZ2VyKSBvcgotICAgICAg
ICAgICAgICAgICAgICh0b2tlbiA9PSB0b2tlbl90eXBlOjp2YWx1ZV9mbG9hdCkpOwotCi0gICAg
ICAgICAgICBzdHJ0b251bSBudW1fY29udmVydGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KG1fc3RhcnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihtX2N1cnNvcikpOwotCi0gICAgICAgICAgICBzd2l0Y2gg
KHRva2VuKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6OnRva2Vu
X3R5cGU6OnZhbHVlX3Vuc2lnbmVkOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgbnVtYmVyX3Vuc2lnbmVkX3QgdmFsOwotICAgICAgICAgICAgICAgICAgICBpZiAobnVt
X2NvbnZlcnRlci50byh2YWwpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBwYXJzaW5nIHN1Y2Nlc3NmdWwKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5tX3R5cGUgPSB2YWx1ZV90OjpudW1iZXJfdW5zaWduZWQ7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6
OnRva2VuX3R5cGU6OnZhbHVlX2ludGVnZXI6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBudW1iZXJfaW50ZWdlcl90IHZhbDsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG51bV9jb252ZXJ0ZXIudG8odmFsKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gcGFyc2luZyBzdWNjZXNzZnVsCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQubV90eXBlID0gdmFsdWVfdDo6bnVtYmVyX2ludGVnZXI7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIHBhcnNlIGZsb2F0IChl
aXRoZXIgZXhwbGljaXRseSBvciBiZWNhdXNlIGEgcHJldmlvdXMgY29udmVyc2lvbgotICAgICAg
ICAgICAgLy8gZmFpbGVkKQotICAgICAgICAgICAgbnVtYmVyX2Zsb2F0X3QgdmFsOwotICAgICAg
ICAgICAgaWYgKG51bV9jb252ZXJ0ZXIudG8odmFsKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAvLyBwYXJzaW5nIHN1Y2Nlc3NmdWwKLSAgICAgICAgICAgICAgICByZXN1bHQubV90
eXBlID0gdmFsdWVfdDo6bnVtYmVyX2Zsb2F0OwotICAgICAgICAgICAgICAgIHJlc3VsdC5tX3Zh
bHVlID0gdmFsOwotCi0gICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBpbmZpbml0eSBhbmQgTkFO
IGJ5IG51bGwKLSAgICAgICAgICAgICAgICBpZiAobm90IHN0ZDo6aXNmaW5pdGUocmVzdWx0Lm1f
dmFsdWUubnVtYmVyX2Zsb2F0KSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC5tX3R5cGUgID0gdmFsdWVfdDo6bnVsbDsKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0Lm1fdmFsdWUgPSBiYXNpY19qc29uOjpqc29uX3ZhbHVlKCk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIGNvdWxkbid0IHBhcnNlIG51bWJlciBpbiBhbnkgZm9ybWF0Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgcHJpdmF0ZToKLSAgICAgICAg
Ly8vIG9wdGlvbmFsIGlucHV0IHN0cmVhbQotICAgICAgICBzdGQ6OmlzdHJlYW0qIG1fc3RyZWFt
ID0gbnVsbHB0cjsKLSAgICAgICAgLy8vIGxpbmUgYnVmZmVyIGJ1ZmZlciBmb3IgbV9zdHJlYW0K
LSAgICAgICAgc3RyaW5nX3QgbV9saW5lX2J1ZmZlciB7fTsKLSAgICAgICAgLy8vIHVzZWQgZm9y
IGZpbGxpbmcgbV9saW5lX2J1ZmZlcgotICAgICAgICBzdHJpbmdfdCBtX2xpbmVfYnVmZmVyX3Rt
cCB7fTsKLSAgICAgICAgLy8vIHRoZSBidWZmZXIgcG9pbnRlcgotICAgICAgICBjb25zdCBsZXhl
cl9jaGFyX3QqIG1fY29udGVudCA9IG51bGxwdHI7Ci0gICAgICAgIC8vLyBwb2ludGVyIHRvIHRo
ZSBiZWdpbm5pbmcgb2YgdGhlIGN1cnJlbnQgc3ltYm9sCi0gICAgICAgIGNvbnN0IGxleGVyX2No
YXJfdCogbV9zdGFydCA9IG51bGxwdHI7Ci0gICAgICAgIC8vLyBwb2ludGVyIGZvciBiYWNrdHJh
Y2tpbmcgaW5mb3JtYXRpb24KLSAgICAgICAgY29uc3QgbGV4ZXJfY2hhcl90KiBtX21hcmtlciA9
IG51bGxwdHI7Ci0gICAgICAgIC8vLyBwb2ludGVyIHRvIHRoZSBjdXJyZW50IHN5bWJvbAotICAg
ICAgICBjb25zdCBsZXhlcl9jaGFyX3QqIG1fY3Vyc29yID0gbnVsbHB0cjsKLSAgICAgICAgLy8v
IHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgYnVmZmVyCi0gICAgICAgIGNvbnN0IGxleGVyX2No
YXJfdCogbV9saW1pdCA9IG51bGxwdHI7Ci0gICAgICAgIC8vLyB0aGUgbGFzdCB0b2tlbiB0eXBl
Ci0gICAgICAgIHRva2VuX3R5cGUgbGFzdF90b2tlbl90eXBlID0gdG9rZW5fdHlwZTo6ZW5kX29m
X2lucHV0OwotICAgIH07Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgc3ludGF4IGFuYWx5c2lzCi0K
LSAgICBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSByZWN1cnNpdmUgZGVjZW50IHBhcnNlci4KLSAg
ICAqLwotICAgIGNsYXNzIHBhcnNlcgotICAgIHsKLSAgICAgIHB1YmxpYzoKLSAgICAgICAgLy8v
IGEgcGFyc2VyIHJlYWRpbmcgZnJvbSBhIHN0cmluZyBsaXRlcmFsCi0gICAgICAgIHBhcnNlcihj
b25zdCBjaGFyKiBidWZmLCBjb25zdCBwYXJzZXJfY2FsbGJhY2tfdCBjYiA9IG51bGxwdHIpCi0g
ICAgICAgICAgICA6IGNhbGxiYWNrKGNiKSwKLSAgICAgICAgICAgICAgbV9sZXhlcihyZWludGVy
cHJldF9jYXN0PGNvbnN0IHR5cGVuYW1lIGxleGVyOjpsZXhlcl9jaGFyX3QqPihidWZmKSwgc3Rk
OjpzdHJsZW4oYnVmZikpCi0gICAgICAgIHt9Ci0KLSAgICAgICAgLy8vIGEgcGFyc2VyIHJlYWRp
bmcgZnJvbSBhbiBpbnB1dCBzdHJlYW0KLSAgICAgICAgcGFyc2VyKHN0ZDo6aXN0cmVhbSYgaXMs
IGNvbnN0IHBhcnNlcl9jYWxsYmFja190IGNiID0gbnVsbHB0cikKLSAgICAgICAgICAgIDogY2Fs
bGJhY2soY2IpLCBtX2xleGVyKGlzKQotICAgICAgICB7fQotCi0gICAgICAgIC8vLyBhIHBhcnNl
ciByZWFkaW5nIGZyb20gYW4gaXRlcmF0b3IgcmFuZ2Ugd2l0aCBjb250aWd1b3VzIHN0b3JhZ2UK
LSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgSXRlcmF0b3JUeXBlLCB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjwKLSAgICAgICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6Oml0
ZXJhdG9yX3RyYWl0czxJdGVyYXRvclR5cGU+OjppdGVyYXRvcl9jYXRlZ29yeSwgc3RkOjpyYW5k
b21fYWNjZXNzX2l0ZXJhdG9yX3RhZz46OnZhbHVlCi0gICAgICAgICAgICAgICAgICAgICAsIGlu
dD46OnR5cGUKLSAgICAgICAgICAgICAgICAgPSAwPgotICAgICAgICBwYXJzZXIoSXRlcmF0b3JU
eXBlIGZpcnN0LCBJdGVyYXRvclR5cGUgbGFzdCwgY29uc3QgcGFyc2VyX2NhbGxiYWNrX3QgY2Ig
PSBudWxscHRyKQotICAgICAgICAgICAgOiBjYWxsYmFjayhjYiksCi0gICAgICAgICAgICAgIG1f
bGV4ZXIocmVpbnRlcnByZXRfY2FzdDxjb25zdCB0eXBlbmFtZSBsZXhlcjo6bGV4ZXJfY2hhcl90
Kj4oJigqZmlyc3QpKSwKLSAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+
KHN0ZDo6ZGlzdGFuY2UoZmlyc3QsIGxhc3QpKSkKLSAgICAgICAge30KLQotICAgICAgICAvLy8g
cHVibGljIHBhcnNlciBpbnRlcmZhY2UKLSAgICAgICAgYmFzaWNfanNvbiBwYXJzZSgpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIHJlYWQgZmlyc3QgdG9rZW4KLSAgICAgICAgICAgIGdldF90
b2tlbigpOwotCi0gICAgICAgICAgICBiYXNpY19qc29uIHJlc3VsdCA9IHBhcnNlX2ludGVybmFs
KHRydWUpOwotICAgICAgICAgICAgcmVzdWx0LmFzc2VydF9pbnZhcmlhbnQoKTsKLQotICAgICAg
ICAgICAgZXhwZWN0KGxleGVyOjp0b2tlbl90eXBlOjplbmRfb2ZfaW5wdXQpOwotCi0gICAgICAg
ICAgICAvLyByZXR1cm4gcGFyc2VyIHJlc3VsdCBhbmQgcmVwbGFjZSBpdCB3aXRoIG51bGwgaW4g
Y2FzZSB0aGUKLSAgICAgICAgICAgIC8vIHRvcC1sZXZlbCB2YWx1ZSB3YXMgZGlzY2FyZGVkIGJ5
IHRoZSBjYWxsYmFjayBmdW5jdGlvbgotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pc19kaXNj
YXJkZWQoKSA/IGJhc2ljX2pzb24oKSA6IHN0ZDo6bW92ZShyZXN1bHQpOwotICAgICAgICB9Ci0K
LSAgICAgIHByaXZhdGU6Ci0gICAgICAgIC8vLyB0aGUgYWN0dWFsIHBhcnNlcgotICAgICAgICBi
YXNpY19qc29uIHBhcnNlX2ludGVybmFsKGJvb2wga2VlcCkKLSAgICAgICAgewotICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBiYXNpY19qc29uKHZhbHVlX3Q6OmRpc2NhcmRlZCk7Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAobGFzdF90b2tlbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIGxleGVyOjp0b2tlbl90eXBlOjpiZWdpbl9vYmplY3Q6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoa2VlcCBhbmQgKG5vdCBjYWxsYmFjawotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yICgoa2VlcCA9IGNhbGxiYWNrKGRlcHRoKyss
IHBhcnNlX2V2ZW50X3Q6Om9iamVjdF9zdGFydCwgcmVzdWx0KSkgIT0gMCkpKQotICAgICAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBleHBsaWNpdGx5IHNldCBy
ZXN1bHQgdG8gb2JqZWN0IHRvIGNvcGUgd2l0aCB7fQotICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0Lm1fdHlwZSA9IHZhbHVlX3Q6Om9iamVjdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5tX3ZhbHVlID0gdmFsdWVfdDo6b2JqZWN0OwotICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBuZXh0IHRva2VuCi0gICAgICAgICAgICAg
ICAgICAgIGdldF90b2tlbigpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIGNsb3NpbmcgfSAt
PiB3ZSBhcmUgZG9uZQotICAgICAgICAgICAgICAgICAgICBpZiAobGFzdF90b2tlbiA9PSBsZXhl
cjo6dG9rZW5fdHlwZTo6ZW5kX29iamVjdCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoa2VlcCBhbmQgY2FsbGJhY2sgYW5kIG5vdCBjYWxsYmFjaygtLWRlcHRoLCBwYXJzZV9ldmVu
dF90OjpvYmplY3RfZW5kLCByZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2ljX2pzb24odmFsdWVfdDo6ZGlz
Y2FyZGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgICAgICAvLyBubyBjb21tYSBpcyBleHBlY3RlZCBoZXJlCi0gICAgICAgICAgICAgICAgICAg
IHVuZXhwZWN0KGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3IpOwotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIG90aGVyd2lzZTogcGFyc2Uga2V5LXZhbHVlIHBhaXJzCi0gICAgICAg
ICAgICAgICAgICAgIGRvCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHVnbHksIGJ1dCBjb3VsZCBiZSBmaXhlZCB3aXRoIGxvb3AgcmVvcmdhbml6YXRp
b24KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3Rva2VuID09IGxleGVyOjp0b2tl
bl90eXBlOjp2YWx1ZV9zZXBhcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JlIGtleQotICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0KGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9zdHJpbmcpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBrZXkgPSBtX2xleGVyLmdldF9zdHJp
bmcoKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBrZWVwX3RhZyA9IGZhbHNlOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtlZXApCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFz
aWNfanNvbiBrKGtleSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlZXBfdGFn
ID0gY2FsbGJhY2soZGVwdGgsIHBhcnNlX2V2ZW50X3Q6OmtleSwgayk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtlZXBfdGFnID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIHNl
cGFyYXRvciAoOikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldF90b2tlbigpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0KGxleGVyOjp0b2tlbl90eXBlOjpuYW1lX3NlcGFyYXRv
cik7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIGFuZCBhZGQgdmFsdWUKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGdldF90b2tlbigpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byB2YWx1ZSA9IHBhcnNlX2ludGVybmFsKGtlZXApOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGtlZXAgYW5kIGtlZXBfdGFnIGFuZCBub3QgdmFsdWUuaXNfZGlzY2FyZGVkKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0W2tleV0gPSBzdGQ6Om1vdmUodmFsdWUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChsYXN0
X3Rva2VuID09IGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3IpOwotCi0gICAgICAg
ICAgICAgICAgICAgIC8vIGNsb3NpbmcgfQotICAgICAgICAgICAgICAgICAgICBleHBlY3QobGV4
ZXI6OnRva2VuX3R5cGU6OmVuZF9vYmplY3QpOwotICAgICAgICAgICAgICAgICAgICBnZXRfdG9r
ZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGtlZXAgYW5kIGNhbGxiYWNrIGFuZCBub3Qg
Y2FsbGJhY2soLS1kZXB0aCwgcGFyc2VfZXZlbnRfdDo6b2JqZWN0X2VuZCwgcmVzdWx0KSkKLSAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYmFz
aWNfanNvbih2YWx1ZV90OjpkaXNjYXJkZWQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBjYXNlIGxleGVyOjp0b2tlbl90eXBlOjpiZWdpbl9hcnJheToKLSAgICAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChrZWVwIGFuZCAobm90IGNhbGxi
YWNrCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgKChrZWVwID0gY2FsbGJh
Y2soZGVwdGgrKywgcGFyc2VfZXZlbnRfdDo6YXJyYXlfc3RhcnQsIHJlc3VsdCkpICE9IDApKSkK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhwbGlj
aXRseSBzZXQgcmVzdWx0IHRvIG9iamVjdCB0byBjb3BlIHdpdGggW10KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSB2YWx1ZV90OjphcnJheTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWVfdDo6YXJyYXk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyByZWFkIG5leHQgdG9rZW4KLSAgICAg
ICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gY2xv
c2luZyBdIC0+IHdlIGFyZSBkb25lCi0gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3Rva2Vu
ID09IGxleGVyOjp0b2tlbl90eXBlOjplbmRfYXJyYXkpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGdldF90b2tlbigpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhbGxiYWNrIGFuZCBub3QgY2FsbGJhY2soLS1kZXB0aCwgcGFyc2VfZXZlbnRf
dDo6YXJyYXlfZW5kLCByZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2ljX2pzb24odmFsdWVfdDo6ZGlzY2Fy
ZGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
ICAgICAvLyBubyBjb21tYSBpcyBleHBlY3RlZCBoZXJlCi0gICAgICAgICAgICAgICAgICAgIHVu
ZXhwZWN0KGxleGVyOjp0b2tlbl90eXBlOjp2YWx1ZV9zZXBhcmF0b3IpOwotCi0gICAgICAgICAg
ICAgICAgICAgIC8vIG90aGVyd2lzZTogcGFyc2UgdmFsdWVzCi0gICAgICAgICAgICAgICAgICAg
IGRvCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVn
bHksIGJ1dCBjb3VsZCBiZSBmaXhlZCB3aXRoIGxvb3AgcmVvcmdhbml6YXRpb24KLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChsYXN0X3Rva2VuID09IGxleGVyOjp0b2tlbl90eXBlOjp2YWx1
ZV9zZXBhcmF0b3IpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ2V0X3Rva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIHBhcnNlIHZhbHVlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIHZhbHVlID0gcGFyc2VfaW50ZXJuYWwoa2VlcCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoa2VlcCBhbmQgbm90IHZhbHVlLmlzX2Rpc2NhcmRlZCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNo
X2JhY2soc3RkOjptb3ZlKHZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxhc3RfdG9rZW4g
PT0gbGV4ZXI6OnRva2VuX3R5cGU6OnZhbHVlX3NlcGFyYXRvcik7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgLy8gY2xvc2luZyBdCi0gICAgICAgICAgICAgICAgICAgIGV4cGVjdChsZXhlcjo6dG9r
ZW5fdHlwZTo6ZW5kX2FycmF5KTsKLSAgICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChrZWVwIGFuZCBjYWxsYmFjayBhbmQgbm90IGNhbGxiYWNr
KC0tZGVwdGgsIHBhcnNlX2V2ZW50X3Q6OmFycmF5X2VuZCwgcmVzdWx0KSkKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYmFzaWNfanNvbih2
YWx1ZV90OjpkaXNjYXJkZWQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBjYXNlIGxleGVyOjp0b2tlbl90eXBlOjpsaXRlcmFsX251bGw6Ci0gICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBnZXRfdG9rZW4oKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0Lm1fdHlwZSA9IHZhbHVlX3Q6Om51bGw7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6OnRv
a2VuX3R5cGU6OnZhbHVlX3N0cmluZzoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGF1dG8gcyA9IG1fbGV4ZXIuZ2V0X3N0cmluZygpOwotICAgICAgICAgICAg
ICAgICAgICBnZXRfdG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYmFzaWNf
anNvbihzKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgY2FzZSBsZXhlcjo6dG9rZW5fdHlwZTo6bGl0ZXJhbF90cnVlOgot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5tX3R5cGUgPSB2YWx1ZV90Ojpib29sZWFuOwotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQubV92YWx1ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6
OnRva2VuX3R5cGU6OmxpdGVyYWxfZmFsc2U6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBnZXRfdG9rZW4oKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1fdHlw
ZSA9IHZhbHVlX3Q6OmJvb2xlYW47Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tX3ZhbHVl
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6OnRva2VuX3R5cGU6OnZhbHVlX3Vuc2lnbmVk
OgotICAgICAgICAgICAgICAgIGNhc2UgbGV4ZXI6OnRva2VuX3R5cGU6OnZhbHVlX2ludGVnZXI6
Ci0gICAgICAgICAgICAgICAgY2FzZSBsZXhlcjo6dG9rZW5fdHlwZTo6dmFsdWVfZmxvYXQ6Ci0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBtX2xleGVyLmdldF9udW1iZXIo
cmVzdWx0LCBsYXN0X3Rva2VuKTsKLSAgICAgICAgICAgICAgICAgICAgZ2V0X3Rva2VuKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAv
LyB0aGUgbGFzdCB0b2tlbiB3YXMgdW5leHBlY3RlZAotICAgICAgICAgICAgICAgICAgICB1bmV4
cGVjdChsYXN0X3Rva2VuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChrZWVwIGFuZCBjYWxsYmFjayBhbmQgbm90IGNhbGxiYWNrKGRlcHRoLCBw
YXJzZV9ldmVudF90Ojp2YWx1ZSwgcmVzdWx0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBiYXNpY19qc29uKHZhbHVlX3Q6OmRpc2NhcmRlZCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8v
IGdldCBuZXh0IHRva2VuIGZyb20gbGV4ZXIKLSAgICAgICAgdHlwZW5hbWUgbGV4ZXI6OnRva2Vu
X3R5cGUgZ2V0X3Rva2VuKCkKLSAgICAgICAgewotICAgICAgICAgICAgbGFzdF90b2tlbiA9IG1f
bGV4ZXIuc2NhbigpOwotICAgICAgICAgICAgcmV0dXJuIGxhc3RfdG9rZW47Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGV4cGVjdCh0eXBlbmFtZSBsZXhlcjo6dG9rZW5fdHlwZSB0KSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodCAhPSBsYXN0X3Rva2VuKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGVycm9yX21zZyA9ICJwYXJzZSBlcnJv
ciAtIHVuZXhwZWN0ZWQgIjsKLSAgICAgICAgICAgICAgICBlcnJvcl9tc2cgKz0gKGxhc3RfdG9r
ZW4gPT0gbGV4ZXI6OnRva2VuX3R5cGU6OnBhcnNlX2Vycm9yID8gKCInIiArICBtX2xleGVyLmdl
dF90b2tlbl9zdHJpbmcoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyIpIDoK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleGVyOjp0b2tlbl90eXBlX25hbWUobGFz
dF90b2tlbikpOwotICAgICAgICAgICAgICAgIGVycm9yX21zZyArPSAiOyBleHBlY3RlZCAiICsg
bGV4ZXI6OnRva2VuX3R5cGVfbmFtZSh0KTsKLSAgICAgICAgICAgICAgICBKU09OX1RIUk9XKHN0
ZDo6aW52YWxpZF9hcmd1bWVudChlcnJvcl9tc2cpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgdW5leHBlY3QodHlwZW5hbWUgbGV4ZXI6OnRva2VuX3R5cGUgdCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHQgPT0gbGFzdF90b2tlbikKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBlcnJvcl9tc2cgPSAicGFyc2Ug
ZXJyb3IgLSB1bmV4cGVjdGVkICI7Ci0gICAgICAgICAgICAgICAgZXJyb3JfbXNnICs9IChsYXN0
X3Rva2VuID09IGxleGVyOjp0b2tlbl90eXBlOjpwYXJzZV9lcnJvciA/ICgiJyIgKyAgbV9sZXhl
ci5nZXRfdG9rZW5fc3RyaW5nKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIici
KSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhlcjo6dG9rZW5fdHlwZV9uYW1l
KGxhc3RfdG9rZW4pKTsKLSAgICAgICAgICAgICAgICBKU09OX1RIUk9XKHN0ZDo6aW52YWxpZF9h
cmd1bWVudChlcnJvcl9tc2cpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICBw
cml2YXRlOgotICAgICAgICAvLy8gY3VycmVudCBsZXZlbCBvZiByZWN1cnNpb24KLSAgICAgICAg
aW50IGRlcHRoID0gMDsKLSAgICAgICAgLy8vIGNhbGxiYWNrIGZ1bmN0aW9uCi0gICAgICAgIGNv
bnN0IHBhcnNlcl9jYWxsYmFja190IGNhbGxiYWNrID0gbnVsbHB0cjsKLSAgICAgICAgLy8vIHRo
ZSB0eXBlIG9mIHRoZSBsYXN0IHJlYWQgdG9rZW4KLSAgICAgICAgdHlwZW5hbWUgbGV4ZXI6OnRv
a2VuX3R5cGUgbGFzdF90b2tlbiA9IGxleGVyOjp0b2tlbl90eXBlOjp1bmluaXRpYWxpemVkOwot
ICAgICAgICAvLy8gdGhlIGxleGVyCi0gICAgICAgIGxleGVyIG1fbGV4ZXI7Ci0gICAgfTsKLQot
ICBwdWJsaWM6Ci0gICAgLyohCi0gICAgQGJyaWVmIEpTT04gUG9pbnRlcgotCi0gICAgQSBKU09O
IHBvaW50ZXIgZGVmaW5lcyBhIHN0cmluZyBzeW50YXggZm9yIGlkZW50aWZ5aW5nIGEgc3BlY2lm
aWMgdmFsdWUKLSAgICB3aXRoaW4gYSBKU09OIGRvY3VtZW50LiBJdCBjYW4gYmUgdXNlZCB3aXRo
IGZ1bmN0aW9ucyBgYXRgIGFuZAotICAgIGBvcGVyYXRvcltdYC4gRnVydGhlcm1vcmUsIEpTT04g
cG9pbnRlcnMgYXJlIHRoZSBiYXNlIGZvciBKU09OIHBhdGNoZXMuCi0KLSAgICBAc2EgW1JGQyA2
OTAxXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkwMSkKLQotICAgIEBzaW5jZSB2
ZXJzaW9uIDIuMC4wCi0gICAgKi8KLSAgICBjbGFzcyBqc29uX3BvaW50ZXIKLSAgICB7Ci0gICAg
ICAgIC8vLyBhbGxvdyBiYXNpY19qc29uIHRvIGFjY2VzcyBwcml2YXRlIG1lbWJlcnMKLSAgICAg
ICAgZnJpZW5kIGNsYXNzIGJhc2ljX2pzb247Ci0KLSAgICAgIHB1YmxpYzoKLSAgICAgICAgLyoh
Ci0gICAgICAgIEBicmllZiBjcmVhdGUgSlNPTiBwb2ludGVyCi0KLSAgICAgICAgQ3JlYXRlIGEg
SlNPTiBwb2ludGVyIGFjY29yZGluZyB0byB0aGUgc3ludGF4IGRlc2NyaWJlZCBpbgotICAgICAg
ICBbU2VjdGlvbiAzIG9mIFJGQzY5MDFdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2
OTAxI3NlY3Rpb24tMykuCi0KLSAgICAgICAgQHBhcmFtW2luXSBzICBzdHJpbmcgcmVwcmVzZW50
aW5nIHRoZSBKU09OIHBvaW50ZXI7IGlmIG9taXR0ZWQsIHRoZQotICAgICAgICAgICAgICAgICAg
ICAgIGVtcHR5IHN0cmluZyBpcyBhc3N1bWVkIHdoaWNoIHJlZmVyZW5jZXMgdGhlIHdob2xlIEpT
T04KLSAgICAgICAgICAgICAgICAgICAgICB2YWx1ZQotCi0gICAgICAgIEB0aHJvdyBzdGQ6OmRv
bWFpbl9lcnJvciBpZiByZWZlcmVuY2UgdG9rZW4gaXMgbm9uZW1wdHkgYW5kIGRvZXMgbm90Ci0g
ICAgICAgIGJlZ2luIHdpdGggYSBzbGFzaCAoYC9gKTsgZXhhbXBsZTogYCJKU09OIHBvaW50ZXIg
bXVzdCBiZSBlbXB0eSBvcgotICAgICAgICBiZWdpbiB3aXRoIC8iYAotICAgICAgICBAdGhyb3cg
c3RkOjpkb21haW5fZXJyb3IgaWYgYSB0aWxkZSAoYH5gKSBpcyBub3QgZm9sbG93ZWQgYnkgYDBg
Ci0gICAgICAgIChyZXByZXNlbnRpbmcgYH5gKSBvciBgMWAgKHJlcHJlc2VudGluZyBgL2ApOyBl
eGFtcGxlOiBgImVzY2FwZSBlcnJvcjoKLSAgICAgICAgfiBtdXN0IGJlIGZvbGxvd2VkIHdpdGgg
MCBvciAxImAKLQotICAgICAgICBAbGl2ZWV4YW1wbGV7VGhlIGV4YW1wbGUgc2hvd3MgdGhlIGNv
bnN0cnVjdGlvbiBzZXZlcmFsIHZhbGlkIEpTT04KLSAgICAgICAgcG9pbnRlcnMgYXMgd2VsbCBh
cyB0aGUgZXhjZXB0aW9uYWwgYmVoYXZpb3IuLGpzb25fcG9pbnRlcn0KLQotICAgICAgICBAc2lu
Y2UgdmVyc2lvbiAyLjAuMAotICAgICAgICAqLwotICAgICAgICBleHBsaWNpdCBqc29uX3BvaW50
ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHMgPSAiIikKLSAgICAgICAgICAgIDogcmVmZXJlbmNlX3Rv
a2VucyhzcGxpdChzKSkKLSAgICAgICAge30KLQotICAgICAgICAvKiEKLSAgICAgICAgQGJyaWVm
IHJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgSlNPTiBwb2ludGVyCi0KLSAg
ICAgICAgQGludmFyaWFudCBGb3IgZWFjaCBKU09OIHBvaW50ZXIgYHB0cmAsIGl0IGhvbGRzOgot
ICAgICAgICBAY29kZSB7LmNwcH0KLSAgICAgICAgcHRyID09IGpzb25fcG9pbnRlcihwdHIudG9f
c3RyaW5nKCkpOwotICAgICAgICBAZW5kY29kZQotCi0gICAgICAgIEByZXR1cm4gYSBzdHJpbmcg
cmVwcmVzZW50YXRpb24gb2YgdGhlIEpTT04gcG9pbnRlcgotCi0gICAgICAgIEBsaXZlZXhhbXBs
ZXtUaGUgZXhhbXBsZSBzaG93cyB0aGUgcmVzdWx0IG9mIGB0b19zdHJpbmdgLiwKLSAgICAgICAg
anNvbl9wb2ludGVyX190b19zdHJpbmd9Ci0KLSAgICAgICAgQHNpbmNlIHZlcnNpb24gMi4wLjAK
LSAgICAgICAgKi8KLSAgICAgICAgc3RkOjpzdHJpbmcgdG9fc3RyaW5nKCkgY29uc3Qgbm9leGNl
cHQKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6YWNjdW11bGF0ZShyZWZlcmVu
Y2VfdG9rZW5zLmJlZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
ZmVyZW5jZV90b2tlbnMuZW5kKCksIHN0ZDo6c3RyaW5ne30sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFtdKGNvbnN0IHN0ZDo6c3RyaW5nICYgYSwgY29uc3Qgc3RkOjpzdHJp
bmcgJiBiKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBhICsgIi8iICsg
ZXNjYXBlKGIpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLy8gQGNv
cHlkb2MgdG9fc3RyaW5nKCkKLSAgICAgICAgb3BlcmF0b3Igc3RkOjpzdHJpbmcoKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdG9fc3RyaW5nKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgcHJpdmF0ZToKLSAgICAgICAgLy8vIHJlbW92ZSBhbmQgcmV0dXJuIGxhc3QgcmVmZXJl
bmNlIHBvaW50ZXIKLSAgICAgICAgc3RkOjpzdHJpbmcgcG9wX2JhY2soKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoaXNfcm9vdCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IEpTT05fVEhST1coc3RkOjpkb21haW5fZXJyb3IoIkpTT04gcG9pbnRlciBoYXMgbm8gcGFyZW50
IikpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBhdXRvIGxhc3QgPSByZWZlcmVuY2Vf
dG9rZW5zLmJhY2soKTsKLSAgICAgICAgICAgIHJlZmVyZW5jZV90b2tlbnMucG9wX2JhY2soKTsK
LSAgICAgICAgICAgIHJldHVybiBsYXN0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIHJldHVy
biB3aGV0aGVyIHBvaW50ZXIgcG9pbnRzIHRvIHRoZSByb290IGRvY3VtZW50Ci0gICAgICAgIGJv
b2wgaXNfcm9vdCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiByZWZlcmVu
Y2VfdG9rZW5zLmVtcHR5KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBqc29uX3BvaW50ZXIgdG9w
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzX3Jvb3QoKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9tYWluX2Vycm9yKCJKU09O
IHBvaW50ZXIgaGFzIG5vIHBhcmVudCIpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
anNvbl9wb2ludGVyIHJlc3VsdCA9ICp0aGlzOwotICAgICAgICAgICAgcmVzdWx0LnJlZmVyZW5j
ZV90b2tlbnMgPSB7cmVmZXJlbmNlX3Rva2Vuc1swXX07Ci0gICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgLyohCi0gICAgICAgIEBicmllZiBjcmVhdGUgYW5k
IHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgcG9pbnRlZCB0byB2YWx1ZQotCi0gICAgICAgIEBj
b21wbGV4aXR5IExpbmVhciBpbiB0aGUgbnVtYmVyIG9mIHJlZmVyZW5jZSB0b2tlbnMuCi0gICAg
ICAgICovCi0gICAgICAgIHJlZmVyZW5jZSBnZXRfYW5kX2NyZWF0ZShyZWZlcmVuY2UgaikgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcG9pbnRlciByZXN1bHQgPSAmajsKLQotICAgICAg
ICAgICAgLy8gaW4gY2FzZSBubyByZWZlcmVuY2UgdG9rZW5zIGV4aXN0LCByZXR1cm4gYSByZWZl
cmVuY2UgdG8gdGhlCi0gICAgICAgICAgICAvLyBKU09OIHZhbHVlIGogd2hpY2ggd2lsbCBiZSBv
dmVyd3JpdHRlbiBieSBhIHByaW1pdGl2ZSB2YWx1ZQotICAgICAgICAgICAgZm9yIChjb25zdCBh
dXRvJiByZWZlcmVuY2VfdG9rZW4gOiByZWZlcmVuY2VfdG9rZW5zKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0LT5tX3R5cGUpCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om51bGw6Ci0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VfdG9rZW4gPT0g
IjAiKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHN0YXJ0IGEgbmV3IGFycmF5IGlmIHJlZmVyZW5jZSB0b2tlbiBpcyAwCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJnJlc3VsdC0+b3BlcmF0b3JbXSgwKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBz
dGFydCBhIG5ldyBvYmplY3Qgb3RoZXJ3aXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gJnJlc3VsdC0+b3BlcmF0b3JbXShyZWZlcmVuY2VfdG9rZW4pOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVj
dDoKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3Jl
YXRlIGFuIGVudHJ5IGluIHRoZSBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9ICZyZXN1bHQtPm9wZXJhdG9yW10ocmVmZXJlbmNlX3Rva2VuKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIGVudHJ5IGluIHRoZSBhcnJheQotICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gJnJlc3VsdC0+b3BlcmF0b3JbXShzdGF0aWNfY2Fz
dDxzaXplX3R5cGU+KHN0ZDo6c3RvaShyZWZlcmVuY2VfdG9rZW4pKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBvbmx5
IHJlYWNoZWQgaWYgdGhlcmUgZXhpc3RzIGEKLSAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNl
IHRva2VuIF9hbmRfIHRoZSBjdXJyZW50IHZhbHVlIGlzIHByaW1pdGl2ZS4gSW4KLSAgICAgICAg
ICAgICAgICAgICAgdGhpcyBjYXNlLCB3ZSBoYXZlIGFuIGVycm9yIHNpdHVhdGlvbiwgYmVjYXVz
ZSBwcmltaXRpdmUKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVzIG1heSBvbmx5IG9jY3VyIGFz
IHNpbmdsZSB2YWx1ZTsgdGhhdCBpcywgd2l0aCBhbgotICAgICAgICAgICAgICAgICAgICBlbXB0
eSBsaXN0IG9mIHJlZmVyZW5jZSB0b2tlbnMuCi0gICAgICAgICAgICAgICAgICAgICovCi0gICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjpkb21haW5fZXJyb3IoImludmFsaWQgdmFs
dWUgdG8gdW5mbGF0dGVuIikpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByZXR1cm4gKnJlc3VsdDsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8qIQotICAgICAgICBAYnJpZWYgcmV0dXJuIGEgcmVmZXJlbmNlIHRv
IHRoZSBwb2ludGVkIHRvIHZhbHVlCi0KLSAgICAgICAgQG5vdGUgVGhpcyB2ZXJzaW9uIGRvZXMg
bm90IHRocm93IGlmIGEgdmFsdWUgaXMgbm90IHByZXNlbnQsIGJ1dCB0cmllcwotICAgICAgICB0
byBjcmVhdGUgbmVzdGVkIHZhbHVlcyBpbnN0ZWFkLiBGb3IgaW5zdGFuY2UsIGNhbGxpbmcgdGhp
cyBmdW5jdGlvbgotICAgICAgICB3aXRoIHBvaW50ZXIgYCIvdGhpcy90aGF0ImAgb24gYSBudWxs
IHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZwotICAgICAgICBgb3BlcmF0b3JbXSgidGhp
cyIpLm9wZXJhdG9yW10oInRoYXQiKWAgb24gdGhhdCB2YWx1ZSwgZWZmZWN0aXZlbHkKLSAgICAg
ICAgY2hhbmdpbmcgdGhlIG51bGwgdmFsdWUgdG8gYW4gb2JqZWN0LgotCi0gICAgICAgIEBwYXJh
bVtpbl0gcHRyICBhIEpTT04gdmFsdWUKLQotICAgICAgICBAcmV0dXJuIHJlZmVyZW5jZSB0byB0
aGUgSlNPTiB2YWx1ZSBwb2ludGVkIHRvIGJ5IHRoZSBKU09OIHBvaW50ZXIKLQotICAgICAgICBA
Y29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIGxlbmd0aCBvZiB0aGUgSlNPTiBwb2ludGVyLgotCi0g
ICAgICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSAgICAgIGlmIHRoZSBKU09OIHBvaW50ZXIg
Y2FuIG5vdCBiZSByZXNvbHZlZAotICAgICAgICBAdGhyb3cgc3RkOjpkb21haW5fZXJyb3IgICAg
ICBpZiBhbiBhcnJheSBpbmRleCBiZWdpbnMgd2l0aCAnMCcKLSAgICAgICAgQHRocm93IHN0ZDo6
aW52YWxpZF9hcmd1bWVudCAgaWYgYW4gYXJyYXkgaW5kZXggd2FzIG5vdCBhIG51bWJlcgotICAg
ICAgICAqLwotICAgICAgICByZWZlcmVuY2UgZ2V0X3VuY2hlY2tlZChwb2ludGVyIHB0cikgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiByZWZlcmVuY2VfdG9r
ZW4gOiByZWZlcmVuY2VfdG9rZW5zKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8v
IGNvbnZlcnQgbnVsbCB2YWx1ZXMgdG8gYXJyYXlzIG9yIG9iamVjdHMgYmVmb3JlIGNvbnRpbnVp
bmcKLSAgICAgICAgICAgICAgICBpZiAocHRyLT5tX3R5cGUgPT0gdmFsdWVfdDo6bnVsbCkKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHJlZmVyZW5j
ZSB0b2tlbiBpcyBhIG51bWJlcgotICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIG51bXMg
PSBzdGQ6OmFsbF9vZihyZWZlcmVuY2VfdG9rZW4uYmVnaW4oKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlX3Rva2VuLmVuZCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXShjb25z
dCBjaGFyIHgpCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6OmlzZGlnaXQoeCk7Ci0gICAgICAgICAgICAgICAgICAgIH0pOwotCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB2YWx1ZSB0byBhcnJheSBmb3IgbnVtYmVycyBvciAi
LSIgb3IgdG8gb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIC8vIG90aGVyd2lzZQotICAgICAg
ICAgICAgICAgICAgICBpZiAobnVtcyBvciByZWZlcmVuY2VfdG9rZW4gPT0gIi0iKQotICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gdmFsdWVfdDo6
YXJyYXk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gdmFs
dWVfdDo6b2JqZWN0OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChwdHItPm1fdHlwZSkKLSAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6b2JqZWN0OgotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgdW5jaGVja2VkIG9iamVj
dCBhY2Nlc3MKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0ciA9ICZwdHItPm9wZXJhdG9yW10o
cmVmZXJlbmNlX3Rva2VuKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJh
eToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXJy
b3IgY29uZGl0aW9uIChjZi4gUkZDIDY5MDEsIFNlY3QuIDQpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocmVmZXJlbmNlX3Rva2VuLnNpemUoKSA+IDEgYW5kIHJlZmVyZW5jZV90b2tlblsw
XSA9PSAnMCcpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigiYXJyYXkgaW5kZXggbXVzdCBu
b3QgYmVnaW4gd2l0aCAnMCciKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VfdG9rZW4gPT0gIi0iKQotICAgICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4cGxpY2l0
bHkgdHJlYXQgIi0iIGFzIGluZGV4IGJleW9uZCB0aGUgZW5kCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHRyID0gJnB0ci0+b3BlcmF0b3JbXShwdHItPm1fdmFsdWUuYXJyYXktPnNpemUo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gY29udmVydCBhcnJheSBpbmRleCB0byBudW1iZXI7IHVuY2hlY2tlZCBhY2Nlc3MKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcHRyLT5vcGVyYXRvcltdKHN0YXRpY19j
YXN0PHNpemVfdHlwZT4oc3RkOjpzdG9pKHJlZmVyZW5jZV90b2tlbikpKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6Om91dF9v
Zl9yYW5nZSgidW5yZXNvbHZlZCByZWZlcmVuY2UgdG9rZW4gJyIgKyByZWZlcmVuY2VfdG9rZW4g
KyAiJyIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuICpwdHI7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZWZlcmVuY2UgZ2V0X2NoZWNrZWQocG9pbnRlciBwdHIpIGNvbnN0Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcmVmZXJlbmNlX3Rva2VuIDogcmVmZXJlbmNlX3Rv
a2VucykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHB0ci0+bV90eXBl
KQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90Ojpv
YmplY3Q6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IG5vdGU6IGF0IHBlcmZvcm1zIHJhbmdlIGNoZWNrCi0gICAgICAgICAgICAgICAgICAgICAgICBw
dHIgPSAmcHRyLT5hdChyZWZlcmVuY2VfdG9rZW4pOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBjYXNl
IHZhbHVlX3Q6OmFycmF5OgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAocmVmZXJlbmNlX3Rva2VuID09ICItIikKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAiLSIgYWx3YXlzIGZhaWxzIHRo
ZSByYW5nZSBjaGVjawotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT05fVEhST1coc3Rk
OjpvdXRfb2ZfcmFuZ2UoImFycmF5IGluZGV4ICctJyAoIiArCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnRvX3N0cmluZyhwdHIt
Pm1fdmFsdWUuYXJyYXktPnNpemUoKSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIikgaXMgb3V0IG9mIHJhbmdlIikpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBlcnJvciBj
b25kaXRpb24gKGNmLiBSRkMgNjkwMSwgU2VjdC4gNCkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZWZlcmVuY2VfdG9rZW4uc2l6ZSgpID4gMSBhbmQgcmVmZXJlbmNlX3Rva2VuWzBdID09
ICcwJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9tYWluX2Vycm9yKCJhcnJheSBpbmRleCBtdXN0IG5vdCBi
ZWdpbiB3aXRoICcwJyIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gbm90ZTogYXQgcGVyZm9ybXMgcmFuZ2UgY2hlY2sKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHB0ciA9ICZwdHItPmF0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oc3Rk
OjpzdG9pKHJlZmVyZW5jZV90b2tlbikpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNPTl9USFJP
VyhzdGQ6Om91dF9vZl9yYW5nZSgidW5yZXNvbHZlZCByZWZlcmVuY2UgdG9rZW4gJyIgKyByZWZl
cmVuY2VfdG9rZW4gKyAiJyIpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuICpwdHI7Ci0gICAgICAg
IH0KLQotICAgICAgICAvKiEKLSAgICAgICAgQGJyaWVmIHJldHVybiBhIGNvbnN0IHJlZmVyZW5j
ZSB0byB0aGUgcG9pbnRlZCB0byB2YWx1ZQotCi0gICAgICAgIEBwYXJhbVtpbl0gcHRyICBhIEpT
T04gdmFsdWUKLQotICAgICAgICBAcmV0dXJuIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgSlNPTiB2
YWx1ZSBwb2ludGVkIHRvIGJ5IHRoZSBKU09OCi0gICAgICAgICAgICAgICAgcG9pbnRlcgotICAg
ICAgICAqLwotICAgICAgICBjb25zdF9yZWZlcmVuY2UgZ2V0X3VuY2hlY2tlZChjb25zdF9wb2lu
dGVyIHB0cikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBy
ZWZlcmVuY2VfdG9rZW4gOiByZWZlcmVuY2VfdG9rZW5zKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHN3aXRjaCAocHRyLT5tX3R5cGUpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICBjYXNlIHZhbHVlX3Q6Om9iamVjdDoKLSAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHVuY2hlY2tlZCBvYmplY3QgYWNjZXNz
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcHRyLT5vcGVyYXRvcltdKHJlZmVyZW5j
ZV90b2tlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6Ci0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2Vf
dG9rZW4gPT0gIi0iKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vICItIiBjYW5ub3QgYmUgdXNlZCBmb3IgY29uc3QgYWNjZXNzCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6Om91dF9vZl9yYW5nZSgiYXJy
YXkgaW5kZXggJy0nICgiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6dG9fc3RyaW5nKHB0ci0+bV92YWx1ZS5hcnJheS0+c2l6
ZSgpKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiKSBpcyBvdXQgb2YgcmFuZ2UiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVycm9yIGNvbmRpdGlvbiAoY2YuIFJGQyA2
OTAxLCBTZWN0LiA0KQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV90b2tl
bi5zaXplKCkgPiAxIGFuZCByZWZlcmVuY2VfdG9rZW5bMF0gPT0gJzAnKQotICAgICAgICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT05fVEhST1coc3Rk
Ojpkb21haW5fZXJyb3IoImFycmF5IGluZGV4IG11c3Qgbm90IGJlZ2luIHdpdGggJzAnIikpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB1
c2UgdW5jaGVja2VkIGFycmF5IGFjY2VzcwotICAgICAgICAgICAgICAgICAgICAgICAgcHRyID0g
JnB0ci0+b3BlcmF0b3JbXShzdGF0aWNfY2FzdDxzaXplX3R5cGU+KHN0ZDo6c3RvaShyZWZlcmVu
Y2VfdG9rZW4pKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjpvdXRfb2Zf
cmFuZ2UoInVucmVzb2x2ZWQgcmVmZXJlbmNlIHRva2VuICciICsgcmVmZXJlbmNlX3Rva2VuICsg
IiciKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiAqcHRyOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y29uc3RfcmVmZXJlbmNlIGdldF9jaGVja2VkKGNvbnN0X3BvaW50ZXIgcHRyKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHJlZmVyZW5jZV90b2tlbiA6IHJl
ZmVyZW5jZV90b2tlbnMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChw
dHItPm1fdHlwZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2Ug
dmFsdWVfdDo6b2JqZWN0OgotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBub3RlOiBhdCBwZXJmb3JtcyByYW5nZSBjaGVjawotICAgICAgICAgICAgICAg
ICAgICAgICAgcHRyID0gJnB0ci0+YXQocmVmZXJlbmNlX3Rva2VuKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV90b2tlbiA9PSAiLSIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIi0iIGFsd2F5
cyBmYWlscyB0aGUgcmFuZ2UgY2hlY2sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09O
X1RIUk9XKHN0ZDo6b3V0X29mX3JhbmdlKCJhcnJheSBpbmRleCAnLScgKCIgKwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp0b19z
dHJpbmcocHRyLT5tX3ZhbHVlLmFycmF5LT5zaXplKCkpICsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpIGlzIG91dCBvZiByYW5nZSIp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gZXJyb3IgY29uZGl0aW9uIChjZi4gUkZDIDY5MDEsIFNlY3QuIDQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocmVmZXJlbmNlX3Rva2VuLnNpemUoKSA+IDEgYW5kIHJlZmVyZW5jZV90
b2tlblswXSA9PSAnMCcpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJvcigiYXJyYXkgaW5kZXgg
bXVzdCBub3QgYmVnaW4gd2l0aCAnMCciKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IGF0IHBlcmZvcm1zIHJhbmdlIGNoZWNr
Ci0gICAgICAgICAgICAgICAgICAgICAgICBwdHIgPSAmcHRyLT5hdChzdGF0aWNfY2FzdDxzaXpl
X3R5cGU+KHN0ZDo6c3RvaShyZWZlcmVuY2VfdG9rZW4pKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IEpTT05fVEhST1coc3RkOjpvdXRfb2ZfcmFuZ2UoInVucmVzb2x2ZWQgcmVmZXJlbmNlIHRva2Vu
ICciICsgcmVmZXJlbmNlX3Rva2VuICsgIiciKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiAqcHRy
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIHNwbGl0IHRoZSBzdHJpbmcgaW5wdXQgdG8gcmVm
ZXJlbmNlIHRva2VucwotICAgICAgICBzdGF0aWMgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNw
bGl0KGNvbnN0IHN0ZDo6c3RyaW5nJiByZWZlcmVuY2Vfc3RyaW5nKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVzdWx0OwotCi0gICAgICAgICAgICAv
LyBzcGVjaWFsIGNhc2U6IGVtcHR5IHJlZmVyZW5jZSBzdHJpbmcgLT4gbm8gcmVmZXJlbmNlIHRv
a2VucwotICAgICAgICAgICAgaWYgKHJlZmVyZW5jZV9zdHJpbmcuZW1wdHkoKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBjaGVjayBpZiBub25lbXB0eSByZWZlcmVuY2Ugc3RyaW5nIGJlZ2lucyB3
aXRoIHNsYXNoCi0gICAgICAgICAgICBpZiAocmVmZXJlbmNlX3N0cmluZ1swXSAhPSAnLycpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFpbl9lcnJv
cigiSlNPTiBwb2ludGVyIG11c3QgYmUgZW1wdHkgb3IgYmVnaW4gd2l0aCAnLyciKSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGV4dHJhY3QgdGhlIHJlZmVyZW5jZSB0b2tlbnM6
Ci0gICAgICAgICAgICAvLyAtIHNsYXNoOiBwb3NpdGlvbiBvZiB0aGUgbGFzdCByZWFkIHNsYXNo
IChvciBlbmQgb2Ygc3RyaW5nKQotICAgICAgICAgICAgLy8gLSBzdGFydDogcG9zaXRpb24gYWZ0
ZXIgdGhlIHByZXZpb3VzIHNsYXNoCi0gICAgICAgICAgICBmb3IgKAotICAgICAgICAgICAgICAg
IC8vIHNlYXJjaCBmb3IgdGhlIGZpcnN0IHNsYXNoIGFmdGVyIHRoZSBmaXJzdCBjaGFyYWN0ZXIK
LSAgICAgICAgICAgICAgICBzaXplX3Qgc2xhc2ggPSByZWZlcmVuY2Vfc3RyaW5nLmZpbmRfZmly
c3Rfb2YoJy8nLCAxKSwKLSAgICAgICAgICAgICAgICAvLyBzZXQgdGhlIGJlZ2lubmluZyBvZiB0
aGUgZmlyc3QgcmVmZXJlbmNlIHRva2VuCi0gICAgICAgICAgICAgICAgc3RhcnQgPSAxOwotICAg
ICAgICAgICAgICAgIC8vIHdlIGNhbiBzdG9wIGlmIHN0YXJ0ID09IHN0cmluZzo6bnBvcysxID0g
MAotICAgICAgICAgICAgICAgIHN0YXJ0ICE9IDA7Ci0gICAgICAgICAgICAgICAgLy8gc2V0IHRo
ZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgcmVmZXJlbmNlIHRva2VuCi0gICAgICAgICAgICAgICAg
Ly8gKHdpbGwgZXZlbnR1YWxseSBiZSAwIGlmIHNsYXNoID09IHN0ZDo6c3RyaW5nOjpucG9zKQot
ICAgICAgICAgICAgICAgIHN0YXJ0ID0gc2xhc2ggKyAxLAotICAgICAgICAgICAgICAgIC8vIGZp
bmQgbmV4dCBzbGFzaAotICAgICAgICAgICAgICAgIHNsYXNoID0gcmVmZXJlbmNlX3N0cmluZy5m
aW5kX2ZpcnN0X29mKCcvJywgc3RhcnQpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IC8vIHVzZSB0aGUgdGV4dCBiZXR3ZWVuIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlZmVyZW5jZSB0
b2tlbgotICAgICAgICAgICAgICAgIC8vIChzdGFydCkgYW5kIHRoZSBsYXN0IHNsYXNoIChzbGFz
aCkuCi0gICAgICAgICAgICAgICAgYXV0byByZWZlcmVuY2VfdG9rZW4gPSByZWZlcmVuY2Vfc3Ry
aW5nLnN1YnN0cihzdGFydCwgc2xhc2ggLSBzdGFydCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBj
aGVjayByZWZlcmVuY2UgdG9rZW5zIGFyZSBwcm9wZXJseSBlc2NhcGVkCi0gICAgICAgICAgICAg
ICAgZm9yIChzaXplX3QgcG9zID0gcmVmZXJlbmNlX3Rva2VuLmZpbmRfZmlyc3Rfb2YoJ34nKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvczsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHBvcyA9IHJlZmVyZW5jZV90b2tlbi5maW5kX2ZpcnN0X29mKCd+
JywgcG9zICsgMSkpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBhc3Nl
cnQocmVmZXJlbmNlX3Rva2VuW3Bvc10gPT0gJ34nKTsKLQotICAgICAgICAgICAgICAgICAgICAv
LyB+IG11c3QgYmUgZm9sbG93ZWQgYnkgMCBvciAxCi0gICAgICAgICAgICAgICAgICAgIGlmIChw
b3MgPT0gcmVmZXJlbmNlX3Rva2VuLnNpemUoKSAtIDEgb3IKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAocmVmZXJlbmNlX3Rva2VuW3BvcyArIDFdICE9ICcwJyBhbmQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlX3Rva2VuW3BvcyArIDFdICE9ICcxJykpCi0gICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTT05fVEhST1coc3Rk
Ojpkb21haW5fZXJyb3IoImVzY2FwZSBlcnJvcjogJ34nIG11c3QgYmUgZm9sbG93ZWQgd2l0aCAn
MCcgb3IgJzEnIikpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgLy8gZmluYWxseSwgc3RvcmUgdGhlIHJlZmVyZW5jZSB0b2tlbgot
ICAgICAgICAgICAgICAgIHVuZXNjYXBlKHJlZmVyZW5jZV90b2tlbik7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0LnB1c2hfYmFjayhyZWZlcmVuY2VfdG9rZW4pOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgIHByaXZhdGU6Ci0g
ICAgICAgIC8qIQotICAgICAgICBAYnJpZWYgcmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgYSBz
dWJzdHJpbmcgYnkgYW5vdGhlciBzdHJpbmcKLQotICAgICAgICBAcGFyYW1baW4sb3V0XSBzICB0
aGUgc3RyaW5nIHRvIG1hbmlwdWxhdGU7IGNoYW5nZWQgc28gdGhhdCBhbGwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgb2NjdXJyZW5jZXMgb2YgQGEgZiBhcmUgcmVwbGFjZWQgd2l0aCBAYSB0
Ci0gICAgICAgIEBwYXJhbVtpbl0gICAgIGYgIHRoZSBzdWJzdHJpbmcgdG8gcmVwbGFjZSB3aXRo
IEBhIHQKLSAgICAgICAgQHBhcmFtW2luXSAgICAgdCAgdGhlIHN0cmluZyB0byByZXBsYWNlIEBh
IGYKLQotICAgICAgICBAcHJlIFRoZSBzZWFyY2ggc3RyaW5nIEBhIGYgbXVzdCBub3QgYmUgZW1w
dHkuCi0KLSAgICAgICAgQHNpbmNlIHZlcnNpb24gMi4wLjAKLSAgICAgICAgKi8KLSAgICAgICAg
c3RhdGljIHZvaWQgcmVwbGFjZV9zdWJzdHJpbmcoc3RkOjpzdHJpbmcmIHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdCkKLSAg
ICAgICAgewotICAgICAgICAgICAgYXNzZXJ0KG5vdCBmLmVtcHR5KCkpOwotCi0gICAgICAgICAg
ICBmb3IgKAotICAgICAgICAgICAgICAgIHNpemVfdCBwb3MgPSBzLmZpbmQoZik7ICAgICAgICAg
Ly8gZmluZCBmaXJzdCBvY2N1cnJlbmNlIG9mIGYKLSAgICAgICAgICAgICAgICBwb3MgIT0gc3Rk
OjpzdHJpbmc6Om5wb3M7ICAgICAgIC8vIG1ha2Ugc3VyZSBmIHdhcyBmb3VuZAotICAgICAgICAg
ICAgICAgIHMucmVwbGFjZShwb3MsIGYuc2l6ZSgpLCB0KSwgICAgLy8gcmVwbGFjZSB3aXRoIHQK
LSAgICAgICAgICAgICAgICBwb3MgPSBzLmZpbmQoZiwgcG9zICsgdC5zaXplKCkpIC8vIGZpbmQg
bmV4dCBvY2N1cnJlbmNlIG9mIGYKLSAgICAgICAgICAgICk7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLy8gZXNjYXBlIHRpbGRlIGFuZCBzbGFzaAotICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcg
ZXNjYXBlKHN0ZDo6c3RyaW5nIHMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIGVzY2FwZSAi
fiIiIHRvICJ+MCIgYW5kICIvIiB0byAifjEiCi0gICAgICAgICAgICByZXBsYWNlX3N1YnN0cmlu
ZyhzLCAifiIsICJ+MCIpOwotICAgICAgICAgICAgcmVwbGFjZV9zdWJzdHJpbmcocywgIi8iLCAi
fjEiKTsKLSAgICAgICAgICAgIHJldHVybiBzOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8vIHVu
ZXNjYXBlIHRpbGRlIGFuZCBzbGFzaAotICAgICAgICBzdGF0aWMgdm9pZCB1bmVzY2FwZShzdGQ6
OnN0cmluZyYgcykKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZmlyc3QgdHJhbnNmb3JtIGFu
eSBvY2N1cnJlbmNlIG9mIHRoZSBzZXF1ZW5jZSAnfjEnIHRvICcvJwotICAgICAgICAgICAgcmVw
bGFjZV9zdWJzdHJpbmcocywgIn4xIiwgIi8iKTsKLSAgICAgICAgICAgIC8vIHRoZW4gdHJhbnNm
b3JtIGFueSBvY2N1cnJlbmNlIG9mIHRoZSBzZXF1ZW5jZSAnfjAnIHRvICd+JwotICAgICAgICAg
ICAgcmVwbGFjZV9zdWJzdHJpbmcocywgIn4wIiwgIn4iKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8qIQotICAgICAgICBAcGFyYW1baW5dIHJlZmVyZW5jZV9zdHJpbmcgIHRoZSByZWZlcmVuY2Ug
c3RyaW5nIHRvIHRoZSBjdXJyZW50IHZhbHVlCi0gICAgICAgIEBwYXJhbVtpbl0gdmFsdWUgICAg
ICAgICAgICAgdGhlIHZhbHVlIHRvIGNvbnNpZGVyCi0gICAgICAgIEBwYXJhbVtpbixvdXRdIHJl
c3VsdCAgICAgICAgdGhlIHJlc3VsdCBvYmplY3QgdG8gaW5zZXJ0IHZhbHVlcyB0bwotCi0gICAg
ICAgIEBub3RlIEVtcHR5IG9iamVjdHMgb3IgYXJyYXlzIGFyZSBmbGF0dGVuZWQgdG8gYG51bGxg
LgotICAgICAgICAqLwotICAgICAgICBzdGF0aWMgdm9pZCBmbGF0dGVuKGNvbnN0IHN0ZDo6c3Ry
aW5nJiByZWZlcmVuY2Vfc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGJhc2ljX2pzb24mIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX2pz
b24mIHJlc3VsdCkKLSAgICAgICAgewotICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5tX3R5cGUp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjphcnJheToKLSAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX3ZhbHVlLmFy
cmF5LT5lbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBmbGF0dGVuIGVtcHR5IGFycmF5IGFzIG51bGwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdFtyZWZlcmVuY2Vfc3RyaW5nXSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIGFycmF5IGFuZCB1c2UgaW5kZXggYXMg
cmVmZXJlbmNlIHN0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2YWx1ZS5tX3ZhbHVlLmFycmF5LT5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGF0dGVuKHJlZmVyZW5j
ZV9zdHJpbmcgKyAiLyIgKyBzdGQ6OnRvX3N0cmluZyhpKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlLm1fdmFsdWUuYXJyYXktPm9wZXJhdG9yW10oaSksIHJlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgICAgICBpZiAodmFsdWUubV92YWx1ZS5vYmplY3QtPmVtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZsYXR0ZW4gZW1wdHkgb2Jq
ZWN0IGFzIG51bGwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtyZWZlcmVuY2Vfc3Ry
aW5nXSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBpdGVyYXRlIG9iamVjdCBhbmQgdXNlIGtleXMgYXMgcmVmZXJlbmNlIHN0cmluZwotICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBlbGVtZW50IDogKnZhbHVlLm1fdmFs
dWUub2JqZWN0KQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsYXR0ZW4ocmVmZXJlbmNlX3N0cmluZyArICIvIiArIGVzY2FwZShlbGVtZW50
LmZpcnN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Vj
b25kLCByZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICAvLyBhZGQgcHJpbWl0aXZlIHZhbHVlIHdpdGggaXRzIHJlZmVyZW5jZSBzdHJpbmcK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3JlZmVyZW5jZV9zdHJpbmddID0gdmFsdWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIQotICAgICAgICBAcGFyYW1baW5dIHZhbHVlICBm
bGF0dGVuZWQgSlNPTgotCi0gICAgICAgIEByZXR1cm4gdW5mbGF0dGVuZWQgSlNPTgotICAgICAg
ICAqLwotICAgICAgICBzdGF0aWMgYmFzaWNfanNvbiB1bmZsYXR0ZW4oY29uc3QgYmFzaWNfanNv
biYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChub3QgdmFsdWUuaXNfb2JqZWN0
KCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmRvbWFp
bl9lcnJvcigib25seSBvYmplY3RzIGNhbiBiZSB1bmZsYXR0ZW5lZCIpKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgYmFzaWNfanNvbiByZXN1bHQ7Ci0KLSAgICAgICAgICAgIC8vIGl0
ZXJhdGUgdGhlIEpTT04gb2JqZWN0IHZhbHVlcwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBlbGVtZW50IDogKnZhbHVlLm1fdmFsdWUub2JqZWN0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGlmIChub3QgZWxlbWVudC5zZWNvbmQuaXNfcHJpbWl0aXZlKCkpCi0gICAgICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBKU09OX1RIUk9XKHN0ZDo6ZG9tYWluX2Vy
cm9yKCJ2YWx1ZXMgaW4gb2JqZWN0IG11c3QgYmUgcHJpbWl0aXZlIikpOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGFzc2lnbiB2YWx1ZSB0byByZWZlcmVuY2UgcG9p
bnRlZCB0byBieSBKU09OIHBvaW50ZXI7IE5vdGUKLSAgICAgICAgICAgICAgICAvLyB0aGF0IGlm
IHRoZSBKU09OIHBvaW50ZXIgaXMgIiIgKGkuZS4sIHBvaW50cyB0byB0aGUgd2hvbGUKLSAgICAg
ICAgICAgICAgICAvLyB2YWx1ZSksIGZ1bmN0aW9uIGdldF9hbmRfY3JlYXRlIHJldHVybnMgYSBy
ZWZlcmVuY2UgdG8KLSAgICAgICAgICAgICAgICAvLyByZXN1bHQgaXRzZWxmLiBBbiBhc3NpZ25t
ZW50IHdpbGwgdGhlbiBjcmVhdGUgYSBwcmltaXRpdmUKLSAgICAgICAgICAgICAgICAvLyB2YWx1
ZS4KLSAgICAgICAgICAgICAgICBqc29uX3BvaW50ZXIoZWxlbWVudC5maXJzdCkuZ2V0X2FuZF9j
cmVhdGUocmVzdWx0KSA9IGVsZW1lbnQuc2Vjb25kOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgIHByaXZhdGU6Ci0gICAgICAg
IGZyaWVuZCBib29sIG9wZXJhdG9yPT0oanNvbl9wb2ludGVyIGNvbnN0JiBsaHMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAganNvbl9wb2ludGVyIGNvbnN0JiByaHMpIG5vZXhjZXB0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBsaHMucmVmZXJlbmNlX3Rva2VucyA9PSBy
aHMucmVmZXJlbmNlX3Rva2VuczsKLSAgICAgICAgfQotCi0gICAgICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yIT0oanNvbl9wb2ludGVyIGNvbnN0JiBsaHMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAganNvbl9wb2ludGVyIGNvbnN0JiByaHMpIG5vZXhjZXB0Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiAhKGxocyA9PSByaHMpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8v
IHRoZSByZWZlcmVuY2UgdG9rZW5zCi0gICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBy
ZWZlcmVuY2VfdG9rZW5zIHt9OwotICAgIH07Ci0KLSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwotICAgIC8vIEpTT04gUG9pbnRlciBzdXBwb3J0IC8vCi0gICAgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8KLQotICAgIC8vLyBAbmFtZSBKU09OIFBvaW50ZXIgZnVuY3Rpb25zCi0gICAg
Ly8vIEB7Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgYWNjZXNzIHNwZWNpZmllZCBlbGVtZW50IHZp
YSBKU09OIFBvaW50ZXIKLQotICAgIFVzZXMgYSBKU09OIHBvaW50ZXIgdG8gcmV0cmlldmUgYSBy
ZWZlcmVuY2UgdG8gdGhlIHJlc3BlY3RpdmUgSlNPTiB2YWx1ZS4KLSAgICBObyBib3VuZCBjaGVj
a2luZyBpcyBwZXJmb3JtZWQuIFNpbWlsYXIgdG8gQHJlZiBvcGVyYXRvcltdKGNvbnN0IHR5cGVu
YW1lCi0gICAgb2JqZWN0X3Q6OmtleV90eXBlJiksIGBudWxsYCB2YWx1ZXMgYXJlIGNyZWF0ZWQg
aW4gYXJyYXlzIGFuZCBvYmplY3RzIGlmCi0gICAgbmVjZXNzYXJ5LgotCi0gICAgSW4gcGFydGlj
dWxhcjoKLSAgICAtIElmIHRoZSBKU09OIHBvaW50ZXIgcG9pbnRzIHRvIGFuIG9iamVjdCBrZXkg
dGhhdCBkb2VzIG5vdCBleGlzdCwgaXQKLSAgICAgIGlzIGNyZWF0ZWQgYW4gZmlsbGVkIHdpdGgg
YSBgbnVsbGAgdmFsdWUgYmVmb3JlIGEgcmVmZXJlbmNlIHRvIGl0Ci0gICAgICBpcyByZXR1cm5l
ZC4KLSAgICAtIElmIHRoZSBKU09OIHBvaW50ZXIgcG9pbnRzIHRvIGFuIGFycmF5IGluZGV4IHRo
YXQgZG9lcyBub3QgZXhpc3QsIGl0Ci0gICAgICBpcyBjcmVhdGVkIGFuIGZpbGxlZCB3aXRoIGEg
YG51bGxgIHZhbHVlIGJlZm9yZSBhIHJlZmVyZW5jZSB0byBpdAotICAgICAgaXMgcmV0dXJuZWQu
IEFsbCBpbmRpY2VzIGJldHdlZW4gdGhlIGN1cnJlbnQgbWF4aW11bSBhbmQgdGhlIGdpdmVuCi0g
ICAgICBpbmRleCBhcmUgYWxzbyBmaWxsZWQgd2l0aCBgbnVsbGAuCi0gICAgLSBUaGUgc3BlY2lh
bCB2YWx1ZSBgLWAgaXMgdHJlYXRlZCBhcyBhIHN5bm9ueW0gZm9yIHRoZSBpbmRleCBwYXN0IHRo
ZQotICAgICAgZW5kLgotCi0gICAgQHBhcmFtW2luXSBwdHIgIGEgSlNPTiBwb2ludGVyCi0KLSAg
ICBAcmV0dXJuIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IEBhIHB0cgot
Ci0gICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCi0KLSAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFu
Z2UgICAgICBpZiB0aGUgSlNPTiBwb2ludGVyIGNhbiBub3QgYmUgcmVzb2x2ZWQKLSAgICBAdGhy
b3cgc3RkOjpkb21haW5fZXJyb3IgICAgICBpZiBhbiBhcnJheSBpbmRleCBiZWdpbnMgd2l0aCAn
MCcKLSAgICBAdGhyb3cgc3RkOjppbnZhbGlkX2FyZ3VtZW50ICBpZiBhbiBhcnJheSBpbmRleCB3
YXMgbm90IGEgbnVtYmVyCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGJlaGF2aW9yIGlzIHNob3du
IGluIHRoZSBleGFtcGxlLixvcGVyYXRvcmpzb25fcG9pbnRlcn0KLQotICAgIEBzaW5jZSB2ZXJz
aW9uIDIuMC4wCi0gICAgKi8KLSAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShjb25zdCBqc29uX3Bv
aW50ZXImIHB0cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBwdHIuZ2V0X3VuY2hlY2tlZCh0aGlz
KTsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgYWNjZXNzIHNwZWNpZmllZCBlbGVtZW50
IHZpYSBKU09OIFBvaW50ZXIKLQotICAgIFVzZXMgYSBKU09OIHBvaW50ZXIgdG8gcmV0cmlldmUg
YSByZWZlcmVuY2UgdG8gdGhlIHJlc3BlY3RpdmUgSlNPTiB2YWx1ZS4KLSAgICBObyBib3VuZCBj
aGVja2luZyBpcyBwZXJmb3JtZWQuIFRoZSBmdW5jdGlvbiBkb2VzIG5vdCBjaGFuZ2UgdGhlIEpT
T04KLSAgICB2YWx1ZTsgbm8gYG51bGxgIHZhbHVlcyBhcmUgY3JlYXRlZC4gSW4gcGFydGljdWxh
ciwgdGhlIHNwZWNpYWwgdmFsdWUKLSAgICBgLWAgeWllbGRzIGFuIGV4Y2VwdGlvbi4KLQotICAg
IEBwYXJhbVtpbl0gcHRyICBKU09OIHBvaW50ZXIgdG8gdGhlIGRlc2lyZWQgZWxlbWVudAotCi0g
ICAgQHJldHVybiBjb25zdCByZWZlcmVuY2UgdG8gdGhlIGVsZW1lbnQgcG9pbnRlZCB0byBieSBA
YSBwdHIKLQotICAgIEBjb21wbGV4aXR5IENvbnN0YW50LgotCi0gICAgQHRocm93IHN0ZDo6b3V0
X29mX3JhbmdlICAgICAgaWYgdGhlIEpTT04gcG9pbnRlciBjYW4gbm90IGJlIHJlc29sdmVkCi0g
ICAgQHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yICAgICAgaWYgYW4gYXJyYXkgaW5kZXggYmVnaW5z
IHdpdGggJzAnCi0gICAgQHRocm93IHN0ZDo6aW52YWxpZF9hcmd1bWVudCAgaWYgYW4gYXJyYXkg
aW5kZXggd2FzIG5vdCBhIG51bWJlcgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBiZWhhdmlvciBp
cyBzaG93biBpbiB0aGUgZXhhbXBsZS4sb3BlcmF0b3Jqc29uX3BvaW50ZXJfY29uc3R9Ci0KLSAg
ICBAc2luY2UgdmVyc2lvbiAyLjAuMAotICAgICovCi0gICAgY29uc3RfcmVmZXJlbmNlIG9wZXJh
dG9yW10oY29uc3QganNvbl9wb2ludGVyJiBwdHIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gcHRyLmdldF91bmNoZWNrZWQodGhpcyk7Ci0gICAgfQotCi0gICAgLyohCi0gICAgQGJyaWVm
IGFjY2VzcyBzcGVjaWZpZWQgZWxlbWVudCB2aWEgSlNPTiBQb2ludGVyCi0KLSAgICBSZXR1cm5z
IGEgcmVmZXJlbmNlIHRvIHRoZSBlbGVtZW50IGF0IHdpdGggc3BlY2lmaWVkIEpTT04gcG9pbnRl
ciBAYSBwdHIsCi0gICAgd2l0aCBib3VuZHMgY2hlY2tpbmcuCi0KLSAgICBAcGFyYW1baW5dIHB0
ciAgSlNPTiBwb2ludGVyIHRvIHRoZSBkZXNpcmVkIGVsZW1lbnQKLQotICAgIEByZXR1cm4gcmVm
ZXJlbmNlIHRvIHRoZSBlbGVtZW50IHBvaW50ZWQgdG8gYnkgQGEgcHRyCi0KLSAgICBAY29tcGxl
eGl0eSBDb25zdGFudC4KLQotICAgIEB0aHJvdyBzdGQ6Om91dF9vZl9yYW5nZSAgICAgIGlmIHRo
ZSBKU09OIHBvaW50ZXIgY2FuIG5vdCBiZSByZXNvbHZlZAotICAgIEB0aHJvdyBzdGQ6OmRvbWFp
bl9lcnJvciAgICAgIGlmIGFuIGFycmF5IGluZGV4IGJlZ2lucyB3aXRoICcwJwotICAgIEB0aHJv
dyBzdGQ6OmludmFsaWRfYXJndW1lbnQgIGlmIGFuIGFycmF5IGluZGV4IHdhcyBub3QgYSBudW1i
ZXIKLQotICAgIEBsaXZlZXhhbXBsZXtUaGUgYmVoYXZpb3IgaXMgc2hvd24gaW4gdGhlIGV4YW1w
bGUuLGF0X2pzb25fcG9pbnRlcn0KLQotICAgIEBzaW5jZSB2ZXJzaW9uIDIuMC4wCi0gICAgKi8K
LSAgICByZWZlcmVuY2UgYXQoY29uc3QganNvbl9wb2ludGVyJiBwdHIpCi0gICAgewotICAgICAg
ICByZXR1cm4gcHRyLmdldF9jaGVja2VkKHRoaXMpOwotICAgIH0KLQotICAgIC8qIQotICAgIEBi
cmllZiBhY2Nlc3Mgc3BlY2lmaWVkIGVsZW1lbnQgdmlhIEpTT04gUG9pbnRlcgotCi0gICAgUmV0
dXJucyBhIGNvbnN0IHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBhdCB3aXRoIHNwZWNpZmllZCBK
U09OIHBvaW50ZXIgQGEKLSAgICBwdHIsIHdpdGggYm91bmRzIGNoZWNraW5nLgotCi0gICAgQHBh
cmFtW2luXSBwdHIgIEpTT04gcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbGVtZW50Ci0KLSAgICBA
cmV0dXJuIHJlZmVyZW5jZSB0byB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IEBhIHB0cgotCi0g
ICAgQGNvbXBsZXhpdHkgQ29uc3RhbnQuCi0KLSAgICBAdGhyb3cgc3RkOjpvdXRfb2ZfcmFuZ2Ug
ICAgICBpZiB0aGUgSlNPTiBwb2ludGVyIGNhbiBub3QgYmUgcmVzb2x2ZWQKLSAgICBAdGhyb3cg
c3RkOjpkb21haW5fZXJyb3IgICAgICBpZiBhbiBhcnJheSBpbmRleCBiZWdpbnMgd2l0aCAnMCcK
LSAgICBAdGhyb3cgc3RkOjppbnZhbGlkX2FyZ3VtZW50ICBpZiBhbiBhcnJheSBpbmRleCB3YXMg
bm90IGEgbnVtYmVyCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGJlaGF2aW9yIGlzIHNob3duIGlu
IHRoZSBleGFtcGxlLixhdF9qc29uX3BvaW50ZXJfY29uc3R9Ci0KLSAgICBAc2luY2UgdmVyc2lv
biAyLjAuMAotICAgICovCi0gICAgY29uc3RfcmVmZXJlbmNlIGF0KGNvbnN0IGpzb25fcG9pbnRl
ciYgcHRyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHB0ci5nZXRfY2hlY2tlZCh0aGlz
KTsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgcmV0dXJuIGZsYXR0ZW5lZCBKU09OIHZh
bHVlCi0KLSAgICBUaGUgZnVuY3Rpb24gY3JlYXRlcyBhIEpTT04gb2JqZWN0IHdob3NlIGtleXMg
YXJlIEpTT04gcG9pbnRlcnMgKHNlZSBbUkZDCi0gICAgNjkwMV0oaHR0cHM6Ly90b29scy5pZXRm
Lm9yZy9odG1sL3JmYzY5MDEpKSBhbmQgd2hvc2UgdmFsdWVzIGFyZSBhbGwKLSAgICBwcmltaXRp
dmUuIFRoZSBvcmlnaW5hbCBKU09OIHZhbHVlIGNhbiBiZSByZXN0b3JlZCB1c2luZyB0aGUgQHJl
ZgotICAgIHVuZmxhdHRlbigpIGZ1bmN0aW9uLgotCi0gICAgQHJldHVybiBhbiBvYmplY3QgdGhh
dCBtYXBzIEpTT04gcG9pbnRlcnMgdG8gcHJpbWl0aXZlIHZhbHVlcwotCi0gICAgQG5vdGUgRW1w
dHkgb2JqZWN0cyBhbmQgYXJyYXlzIGFyZSBmbGF0dGVuZWQgdG8gYG51bGxgIGFuZCB3aWxsIG5v
dCBiZQotICAgICAgICAgIHJlY29uc3RydWN0ZWQgY29ycmVjdGx5IGJ5IHRoZSBAcmVmIHVuZmxh
dHRlbigpIGZ1bmN0aW9uLgotCi0gICAgQGNvbXBsZXhpdHkgTGluZWFyIGluIHRoZSBzaXplIHRo
ZSBKU09OIHZhbHVlLgotCi0gICAgQGxpdmVleGFtcGxle1RoZSBmb2xsb3dpbmcgY29kZSBzaG93
cyBob3cgYSBKU09OIG9iamVjdCBpcyBmbGF0dGVuZWQgdG8gYW4KLSAgICBvYmplY3Qgd2hvc2Ug
a2V5cyBjb25zaXN0IG9mIEpTT04gcG9pbnRlcnMuLGZsYXR0ZW59Ci0KLSAgICBAc2EgQHJlZiB1
bmZsYXR0ZW4oKSBmb3IgdGhlIHJldmVyc2UgZnVuY3Rpb24KLQotICAgIEBzaW5jZSB2ZXJzaW9u
IDIuMC4wCi0gICAgKi8KLSAgICBiYXNpY19qc29uIGZsYXR0ZW4oKSBjb25zdAotICAgIHsKLSAg
ICAgICAgYmFzaWNfanNvbiByZXN1bHQodmFsdWVfdDo6b2JqZWN0KTsKLSAgICAgICAganNvbl9w
b2ludGVyOjpmbGF0dGVuKCIiLCAqdGhpcywgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgdW5mbGF0dGVuIGEgcHJldmlvdXNseSBm
bGF0dGVuZWQgSlNPTiB2YWx1ZQotCi0gICAgVGhlIGZ1bmN0aW9uIHJlc3RvcmVzIHRoZSBhcmJp
dHJhcnkgbmVzdGluZyBvZiBhIEpTT04gdmFsdWUgdGhhdCBoYXMgYmVlbgotICAgIGZsYXR0ZW5l
ZCBiZWZvcmUgdXNpbmcgdGhlIEByZWYgZmxhdHRlbigpIGZ1bmN0aW9uLiBUaGUgSlNPTiB2YWx1
ZSBtdXN0Ci0gICAgbWVldCBjZXJ0YWluIGNvbnN0cmFpbnRzOgotICAgIDEuIFRoZSB2YWx1ZSBt
dXN0IGJlIGFuIG9iamVjdC4KLSAgICAyLiBUaGUga2V5cyBtdXN0IGJlIEpTT04gcG9pbnRlcnMg
KHNlZQotICAgICAgIFtSRkMgNjkwMV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY5
MDEpKQotICAgIDMuIFRoZSBtYXBwZWQgdmFsdWVzIG11c3QgYmUgcHJpbWl0aXZlIEpTT04gdHlw
ZXMuCi0KLSAgICBAcmV0dXJuIHRoZSBvcmlnaW5hbCBKU09OIGZyb20gYSBmbGF0dGVuZWQgdmVy
c2lvbgotCi0gICAgQG5vdGUgRW1wdHkgb2JqZWN0cyBhbmQgYXJyYXlzIGFyZSBmbGF0dGVuZWQg
YnkgQHJlZiBmbGF0dGVuKCkgdG8gYG51bGxgCi0gICAgICAgICAgdmFsdWVzIGFuZCBjYW4gbm90
IHVuZmxhdHRlbmVkIHRvIHRoZWlyIG9yaWdpbmFsIHR5cGUuIEFwYXJ0IGZyb20KLSAgICAgICAg
ICB0aGlzIGV4YW1wbGUsIGZvciBhIEpTT04gdmFsdWUgYGpgLCB0aGUgZm9sbG93aW5nIGlzIGFs
d2F5cyB0cnVlOgotICAgICAgICAgIGBqID09IGouZmxhdHRlbigpLnVuZmxhdHRlbigpYC4KLQot
ICAgIEBjb21wbGV4aXR5IExpbmVhciBpbiB0aGUgc2l6ZSB0aGUgSlNPTiB2YWx1ZS4KLQotICAg
IEBsaXZlZXhhbXBsZXtUaGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgaG93IGEgZmxhdHRlbmVkIEpT
T04gb2JqZWN0IGlzCi0gICAgdW5mbGF0dGVuZWQgaW50byB0aGUgb3JpZ2luYWwgbmVzdGVkIEpT
T04gb2JqZWN0Lix1bmZsYXR0ZW59Ci0KLSAgICBAc2EgQHJlZiBmbGF0dGVuKCkgZm9yIHRoZSBy
ZXZlcnNlIGZ1bmN0aW9uCi0KLSAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAotICAgICovCi0gICAg
YmFzaWNfanNvbiB1bmZsYXR0ZW4oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGpzb25f
cG9pbnRlcjo6dW5mbGF0dGVuKCp0aGlzKTsKLSAgICB9Ci0KLSAgICAvLy8gQH0KLQotICAgIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0gICAgLy8gSlNPTiBQYXRjaCBmdW5jdGlvbnMgLy8K
LSAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCi0gICAgLy8vIEBuYW1lIEpTT04gUGF0
Y2ggZnVuY3Rpb25zCi0gICAgLy8vIEB7Ci0KLSAgICAvKiEKLSAgICBAYnJpZWYgYXBwbGllcyBh
IEpTT04gcGF0Y2gKLQotICAgIFtKU09OIFBhdGNoXShodHRwOi8vanNvbnBhdGNoLmNvbSkgZGVm
aW5lcyBhIEpTT04gZG9jdW1lbnQgc3RydWN0dXJlIGZvcgotICAgIGV4cHJlc3NpbmcgYSBzZXF1
ZW5jZSBvZiBvcGVyYXRpb25zIHRvIGFwcGx5IHRvIGEgSlNPTikgZG9jdW1lbnQuIFdpdGgKLSAg
ICB0aGlzIGZ1bmN0aW9uLCBhIEpTT04gUGF0Y2ggaXMgYXBwbGllZCB0byB0aGUgY3VycmVudCBK
U09OIHZhbHVlIGJ5Ci0gICAgZXhlY3V0aW5nIGFsbCBvcGVyYXRpb25zIGZyb20gdGhlIHBhdGNo
LgotCi0gICAgQHBhcmFtW2luXSBqc29uX3BhdGNoICBKU09OIHBhdGNoIGRvY3VtZW50Ci0gICAg
QHJldHVybiBwYXRjaGVkIGRvY3VtZW50Ci0KLSAgICBAbm90ZSBUaGUgYXBwbGljYXRpb24gb2Yg
YSBwYXRjaCBpcyBhdG9taWM6IEVpdGhlciBhbGwgb3BlcmF0aW9ucyBzdWNjZWVkCi0gICAgICAg
ICAgYW5kIHRoZSBwYXRjaGVkIGRvY3VtZW50IGlzIHJldHVybmVkIG9yIGFuIGV4Y2VwdGlvbiBp
cyB0aHJvd24uIEluCi0gICAgICAgICAgYW55IGNhc2UsIHRoZSBvcmlnaW5hbCB2YWx1ZSBpcyBu
b3QgY2hhbmdlZDogdGhlIHBhdGNoIGlzIGFwcGxpZWQKLSAgICAgICAgICB0byBhIGNvcHkgb2Yg
dGhlIHZhbHVlLgotCi0gICAgQHRocm93IHN0ZDo6b3V0X29mX3JhbmdlIGlmIGEgSlNPTiBwb2lu
dGVyIGluc2lkZSB0aGUgcGF0Y2ggY291bGQgbm90Ci0gICAgYmUgcmVzb2x2ZWQgc3VjY2Vzc2Z1
bGx5IGluIHRoZSBjdXJyZW50IEpTT04gdmFsdWU7IGV4YW1wbGU6IGAia2V5IGJhegotICAgIG5v
dCBmb3VuZCJgCi0gICAgQHRocm93IGludmFsaWRfYXJndW1lbnQgaWYgdGhlIEpTT04gcGF0Y2gg
aXMgbWFsZm9ybWVkIChlLmcuLCBtYW5kYXRvcnkKLSAgICBhdHRyaWJ1dGVzIGFyZSBtaXNzaW5n
KTsgZXhhbXBsZTogYCJvcGVyYXRpb24gYWRkIG11c3QgaGF2ZSBtZW1iZXIgcGF0aCJgCi0KLSAg
ICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIHNpemUgb2YgdGhlIEpTT04gdmFsdWUgYW5kIHRo
ZSBsZW5ndGggb2YgdGhlCi0gICAgSlNPTiBwYXRjaC4gQXMgdXN1YWxseSBvbmx5IGEgZnJhY3Rp
b24gb2YgdGhlIEpTT04gdmFsdWUgaXMgYWZmZWN0ZWQgYnkKLSAgICB0aGUgcGF0Y2gsIHRoZSBj
b21wbGV4aXR5IGNhbiB1c3VhbGx5IGJlIG5lZ2xlY3RlZC4KLQotICAgIEBsaXZlZXhhbXBsZXtU
aGUgZm9sbG93aW5nIGNvZGUgc2hvd3MgaG93IGEgSlNPTiBwYXRjaCBpcyBhcHBsaWVkIHRvIGEK
LSAgICB2YWx1ZS4scGF0Y2h9Ci0KLSAgICBAc2EgQHJlZiBkaWZmIC0tIGNyZWF0ZSBhIEpTT04g
cGF0Y2ggYnkgY29tcGFyaW5nIHR3byBKU09OIHZhbHVlcwotCi0gICAgQHNhIFtSRkMgNjkwMiAo
SlNPTiBQYXRjaCldKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAyKQotICAgIEBz
YSBbUkZDIDY5MDEgKEpTT04gUG9pbnRlcildKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9y
ZmM2OTAxKQotCi0gICAgQHNpbmNlIHZlcnNpb24gMi4wLjAKLSAgICAqLwotICAgIGJhc2ljX2pz
b24gcGF0Y2goY29uc3QgYmFzaWNfanNvbiYganNvbl9wYXRjaCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIC8vIG1ha2UgYSB3b3JraW5nIGNvcHkgdG8gYXBwbHkgdGhlIHBhdGNoIHRvCi0gICAgICAg
IGJhc2ljX2pzb24gcmVzdWx0ID0gKnRoaXM7Ci0KLSAgICAgICAgLy8gdGhlIHZhbGlkIEpTT04g
UGF0Y2ggb3BlcmF0aW9ucwotICAgICAgICBlbnVtIGNsYXNzIHBhdGNoX29wZXJhdGlvbnMge2Fk
ZCwgcmVtb3ZlLCByZXBsYWNlLCBtb3ZlLCBjb3B5LCB0ZXN0LCBpbnZhbGlkfTsKLQotICAgICAg
ICBjb25zdCBhdXRvIGdldF9vcCA9IFtdKGNvbnN0IHN0ZDo6c3RyaW5nIG9wKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAob3AgPT0gImFkZCIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHBhdGNoX29wZXJhdGlvbnM6OmFkZDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChvcCA9PSAicmVtb3ZlIikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcGF0Y2hfb3BlcmF0aW9uczo6cmVtb3ZlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgaWYgKG9wID09ICJyZXBsYWNlIikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gcGF0Y2hfb3BlcmF0aW9uczo6cmVwbGFjZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGlmIChvcCA9PSAibW92ZSIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHBhdGNoX29wZXJhdGlvbnM6Om1vdmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAob3AgPT0gImNvcHkiKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBwYXRjaF9vcGVyYXRpb25zOjpjb3B5OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KG9wID09ICJ0ZXN0IikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGF0
Y2hfb3BlcmF0aW9uczo6dGVzdDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
IHBhdGNoX29wZXJhdGlvbnM6OmludmFsaWQ7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gd3Jh
cHBlciBmb3IgImFkZCIgb3BlcmF0aW9uOyBhZGQgdmFsdWUgYXQgcHRyCi0gICAgICAgIGNvbnN0
IGF1dG8gb3BlcmF0aW9uX2FkZCA9IFsmcmVzdWx0XShqc29uX3BvaW50ZXIgJiBwdHIsIGJhc2lj
X2pzb24gdmFsKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBhZGRpbmcgdG8gdGhlIHJvb3Qg
b2YgdGhlIHRhcmdldCBkb2N1bWVudCBtZWFucyByZXBsYWNpbmcgaXQKLSAgICAgICAgICAgIGlm
IChwdHIuaXNfcm9vdCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHZhbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIHRvcCBlbGVtZW50IG9mIHRoZSBwb2ludGVy
IGV4aXN0cwotICAgICAgICAgICAgICAgIGpzb25fcG9pbnRlciB0b3BfcG9pbnRlciA9IHB0ci50
b3AoKTsKLSAgICAgICAgICAgICAgICBpZiAodG9wX3BvaW50ZXIgIT0gcHRyKQotICAgICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmF0KHRvcF9wb2ludGVyKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBnZXQgcmVmZXJlbmNlIHRvIHBh
cmVudCBvZiBKU09OIHBvaW50ZXIgcHRyCi0gICAgICAgICAgICAgICAgY29uc3QgYXV0byBsYXN0
X3BhdGggPSBwdHIucG9wX2JhY2soKTsKLSAgICAgICAgICAgICAgICBiYXNpY19qc29uJiBwYXJl
bnQgPSByZXN1bHRbcHRyXTsKLQotICAgICAgICAgICAgICAgIHN3aXRjaCAocGFyZW50Lm1fdHlw
ZSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6
bnVsbDoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6Ci0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBvcGVyYXRvcltd
IHRvIGFkZCB2YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50W2xhc3RfcGF0aF0g
PSB2YWw7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNhc2UgdmFsdWVfdDo6YXJyYXk6Ci0gICAgICAg
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0X3BhdGggPT0g
Ii0iKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHNwZWNpYWwgY2FzZTogYXBwZW5kIHRvIGJhY2sKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJlbnQucHVzaF9iYWNrKHZhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXV0byBpZHggPSBzdGQ6OnN0b2ko
bGFzdF9wYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
c2l6ZV90eXBlPihpZHgpID4gcGFyZW50LnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIHVuZGVmaW5l
ZCBiZWhhdmlvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU09OX1RIUk9XKHN0
ZDo6b3V0X29mX3JhbmdlKCJhcnJheSBpbmRleCAiICsgc3RkOjp0b19zdHJpbmcoaWR4KSArICIg
aXMgb3V0IG9mIHJhbmdlIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IGNhc2U6IGluc2Vy
dCBhZGQgb2Zmc2V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5pbnNl
cnQocGFyZW50LmJlZ2luKCkgKyBzdGF0aWNfY2FzdDxkaWZmZXJlbmNlX3R5cGU+KGlkeCksIHZh
bCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBleGlzdHMgYSBwYXJlbnQgaXQg
Y2Fubm90IGJlIHByaW1pdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNl
KTsgIC8vIExDT1ZfRVhDTF9MSU5FCi0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH07Ci0KLSAgICAgICAgLy8gd3JhcHBlciBm
b3IgInJlbW92ZSIgb3BlcmF0aW9uOyByZW1vdmUgdmFsdWUgYXQgcHRyCi0gICAgICAgIGNvbnN0
IGF1dG8gb3BlcmF0aW9uX3JlbW92ZSA9IFsmcmVzdWx0XShqc29uX3BvaW50ZXIgJiBwdHIpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIGdldCByZWZlcmVuY2UgdG8gcGFyZW50IG9mIEpTT04g
cG9pbnRlciBwdHIKLSAgICAgICAgICAgIGNvbnN0IGF1dG8gbGFzdF9wYXRoID0gcHRyLnBvcF9i
YWNrKCk7Ci0gICAgICAgICAgICBiYXNpY19qc29uJiBwYXJlbnQgPSByZXN1bHQuYXQocHRyKTsK
LQotICAgICAgICAgICAgLy8gcmVtb3ZlIGNoaWxkCi0gICAgICAgICAgICBpZiAocGFyZW50Lmlz
X29iamVjdCgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIHBlcmZvcm0gcmFu
Z2UgY2hlY2sKLSAgICAgICAgICAgICAgICBhdXRvIGl0ID0gcGFyZW50LmZpbmQobGFzdF9wYXRo
KTsKLSAgICAgICAgICAgICAgICBpZiAoaXQgIT0gcGFyZW50LmVuZCgpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyZW50LmVyYXNlKGl0KTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6Om91dF9vZl9yYW5nZSgia2V5ICciICsgbGFzdF9w
YXRoICsgIicgbm90IGZvdW5kIikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIGVsc2UgaWYgKHBhcmVudC5pc19hcnJheSgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIC8vIG5vdGUgZXJhc2UgcGVyZm9ybXMgcmFuZ2UgY2hlY2sKLSAgICAg
ICAgICAgICAgICBwYXJlbnQuZXJhc2Uoc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihzdGQ6OnN0b2ko
bGFzdF9wYXRoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9OwotCi0gICAgICAgIC8vIHR5
cGUgY2hlY2sKLSAgICAgICAgaWYgKG5vdCBqc29uX3BhdGNoLmlzX2FycmF5KCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIGEgSlNPTiBwYXRjaCBtdXN0IGJlIGFuIGFycmF5IG9mIG9iamVj
dHMKLSAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjppbnZhbGlkX2FyZ3VtZW50KCJKU09OIHBh
dGNoIG11c3QgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyIpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIGl0ZXJhdGUgYW5kIGFwcGx5IHRoZSBvcGVyYXRpb25zCi0gICAgICAgIGZvciAoY29uc3Qg
YXV0byYgdmFsIDoganNvbl9wYXRjaCkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gd3JhcHBl
ciB0byBnZXQgYSB2YWx1ZSBmb3IgYW4gb3BlcmF0aW9uCi0gICAgICAgICAgICBjb25zdCBhdXRv
IGdldF92YWx1ZSA9IFsmdmFsXShjb25zdCBzdGQ6OnN0cmluZyAmIG9wLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgJiBtZW1iZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0cmluZ190
eXBlKSAtPiBiYXNpY19qc29uJgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIGZp
bmQgdmFsdWUKLSAgICAgICAgICAgICAgICBhdXRvIGl0ID0gdmFsLm1fdmFsdWUub2JqZWN0LT5m
aW5kKG1lbWJlcik7Ci0KLSAgICAgICAgICAgICAgICAvLyBjb250ZXh0LXNlbnNpdGl2ZSBlcnJv
ciBtZXNzYWdlCi0gICAgICAgICAgICAgICAgY29uc3QgYXV0byBlcnJvcl9tc2cgPSAob3AgPT0g
Im9wIikgPyAib3BlcmF0aW9uIiA6ICJvcGVyYXRpb24gJyIgKyBvcCArICInIjsKLQotICAgICAg
ICAgICAgICAgIC8vIGNoZWNrIGlmIGRlc2lyZWQgdmFsdWUgaXMgcHJlc2VudAotICAgICAgICAg
ICAgICAgIGlmIChpdCA9PSB2YWwubV92YWx1ZS5vYmplY3QtPmVuZCgpKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmludmFsaWRfYXJndW1l
bnQoZXJyb3JfbXNnICsgIiBtdXN0IGhhdmUgbWVtYmVyICciICsgbWVtYmVyICsgIiciKSk7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgcmVzdWx0IGlz
IG9mIHR5cGUgc3RyaW5nCi0gICAgICAgICAgICAgICAgaWYgKHN0cmluZ190eXBlIGFuZCBub3Qg
aXQtPnNlY29uZC5pc19zdHJpbmcoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgIEpTT05fVEhST1coc3RkOjppbnZhbGlkX2FyZ3VtZW50KGVycm9yX21zZyArICIgbXVz
dCBoYXZlIHN0cmluZyBtZW1iZXIgJyIgKyBtZW1iZXIgKyAiJyIpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBubyBlcnJvcjogcmV0dXJuIHZhbHVlCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICB9OwotCi0gICAgICAgICAg
ICAvLyB0eXBlIGNoZWNrCi0gICAgICAgICAgICBpZiAobm90IHZhbC5pc19vYmplY3QoKSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBKU09OX1RIUk9XKHN0ZDo6aW52YWxpZF9hcmd1
bWVudCgiSlNPTiBwYXRjaCBtdXN0IGJlIGFuIGFycmF5IG9mIG9iamVjdHMiKSk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIGNvbGxlY3QgbWFuZGF0b3J5IG1lbWJlcnMKLSAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG9wID0gZ2V0X3ZhbHVlKCJvcCIsICJvcCIsIHRydWUp
OwotICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgcGF0aCA9IGdldF92YWx1ZShvcCwgInBh
dGgiLCB0cnVlKTsKLSAgICAgICAgICAgIGpzb25fcG9pbnRlciBwdHIocGF0aCk7Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAoZ2V0X29wKG9wKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIHBhdGNoX29wZXJhdGlvbnM6OmFkZDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbl9hZGQocHRyLCBnZXRfdmFsdWUoImFkZCIsICJ2YWx1ZSIs
IGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6cmVtb3ZlOgotICAgICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uX3JlbW92ZShwdHIpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBjYXNlIHBhdGNoX29wZXJhdGlvbnM6OnJlcGxhY2U6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgInBhdGgiIGxvY2F0aW9uIG11c3QgZXhpc3Qg
LSB1c2UgYXQoKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXQocHRyKSA9IGdldF92YWx1
ZSgicmVwbGFjZSIsICJ2YWx1ZSIsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgY2FzZSBwYXRjaF9vcGVyYXRp
b25zOjptb3ZlOgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c3RkOjpzdHJpbmcgZnJvbV9wYXRoID0gZ2V0X3ZhbHVlKCJtb3ZlIiwgImZyb20iLCB0cnVlKTsK
LSAgICAgICAgICAgICAgICAgICAganNvbl9wb2ludGVyIGZyb21fcHRyKGZyb21fcGF0aCk7Ci0K
LSAgICAgICAgICAgICAgICAgICAgLy8gdGhlICJmcm9tIiBsb2NhdGlvbiBtdXN0IGV4aXN0IC0g
dXNlIGF0KCkKLSAgICAgICAgICAgICAgICAgICAgYmFzaWNfanNvbiB2ID0gcmVzdWx0LmF0KGZy
b21fcHRyKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbW92ZSBvcGVyYXRpb24gaXMg
ZnVuY3Rpb25hbGx5IGlkZW50aWNhbCB0byBhCi0gICAgICAgICAgICAgICAgICAgIC8vICJyZW1v
dmUiIG9wZXJhdGlvbiBvbiB0aGUgImZyb20iIGxvY2F0aW9uLCBmb2xsb3dlZAotICAgICAgICAg
ICAgICAgICAgICAvLyBpbW1lZGlhdGVseSBieSBhbiAiYWRkIiBvcGVyYXRpb24gYXQgdGhlIHRh
cmdldAotICAgICAgICAgICAgICAgICAgICAvLyBsb2NhdGlvbiB3aXRoIHRoZSB2YWx1ZSB0aGF0
IHdhcyBqdXN0IHJlbW92ZWQuCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbl9yZW1vdmUo
ZnJvbV9wdHIpOwotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25fYWRkKHB0ciwgdik7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6Y29weToKLSAgICAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGZyb21fcGF0aCA9IGdldF92YWx1
ZSgiY29weSIsICJmcm9tIiwgdHJ1ZSk7OwotICAgICAgICAgICAgICAgICAgICBjb25zdCBqc29u
X3BvaW50ZXIgZnJvbV9wdHIoZnJvbV9wYXRoKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyB0
aGUgImZyb20iIGxvY2F0aW9uIG11c3QgZXhpc3QgLSB1c2UgYXQoKQotICAgICAgICAgICAgICAg
ICAgICByZXN1bHRbcHRyXSA9IHJlc3VsdC5hdChmcm9tX3B0cik7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGNhc2UgcGF0
Y2hfb3BlcmF0aW9uczo6dGVzdDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
ICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBKU09OX1RSWQot
ICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGVjayBp
ZiAidmFsdWUiIG1hdGNoZXMgdGhlIG9uZSBhdCAicGF0aCIKLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHRoZSAicGF0aCIgbG9jYXRpb24gbXVzdCBleGlzdCAtIHVzZSBhdCgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdWNjZXNzID0gKHJlc3VsdC5hdChwdHIpID09IGdldF92YWx1ZSgi
dGVzdCIsICJ2YWx1ZSIsIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAgICAgSlNPTl9DQVRDSCAoc3RkOjpvdXRfb2ZfcmFuZ2UmKQotICAgICAgICAgICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgb3V0IG9mIHJhbmdl
IGVycm9yczogc3VjY2VzcyByZW1haW5zIGZhbHNlCi0gICAgICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgICAgICAvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgdGVzdCBmYWlscwot
ICAgICAgICAgICAgICAgICAgICBpZiAobm90IHN1Y2Nlc3MpCi0gICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTT05fVEhST1coc3RkOjpkb21haW5fZXJyb3Io
InVuc3VjY2Vzc2Z1bDogIiArIHZhbC5kdW1wKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgIGNhc2UgcGF0Y2hfb3BlcmF0aW9uczo6aW52YWxpZDoKLSAgICAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG9wIG11c3QgYmUgImFkZCIsICJyZW1vdmUiLCAi
cmVwbGFjZSIsICJtb3ZlIiwgImNvcHkiLCBvcgotICAgICAgICAgICAgICAgICAgICAvLyAidGVz
dCIKLSAgICAgICAgICAgICAgICAgICAgSlNPTl9USFJPVyhzdGQ6OmludmFsaWRfYXJndW1lbnQo
Im9wZXJhdGlvbiB2YWx1ZSAnIiArIG9wICsgIicgaXMgaW52YWxpZCIpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLQotICAgIC8qIQotICAgIEBicmllZiBjcmVhdGVzIGEgZGlmZiBhcyBhIEpTT04g
cGF0Y2gKLQotICAgIENyZWF0ZXMgYSBbSlNPTiBQYXRjaF0oaHR0cDovL2pzb25wYXRjaC5jb20p
IHNvIHRoYXQgdmFsdWUgQGEgc291cmNlIGNhbgotICAgIGJlIGNoYW5nZWQgaW50byB0aGUgdmFs
dWUgQGEgdGFyZ2V0IGJ5IGNhbGxpbmcgQHJlZiBwYXRjaCBmdW5jdGlvbi4KLQotICAgIEBpbnZh
cmlhbnQgRm9yIHR3byBKU09OIHZhbHVlcyBAYSBzb3VyY2UgYW5kIEBhIHRhcmdldCwgdGhlIGZv
bGxvd2luZyBjb2RlCi0gICAgeWllbGRzIGFsd2F5cyBgdHJ1ZWA6Ci0gICAgQGNvZGUgey5jcHB9
Ci0gICAgc291cmNlLnBhdGNoKGRpZmYoc291cmNlLCB0YXJnZXQpKSA9PSB0YXJnZXQ7Ci0gICAg
QGVuZGNvZGUKLQotICAgIEBub3RlIEN1cnJlbnRseSwgb25seSBgcmVtb3ZlYCwgYGFkZGAsIGFu
ZCBgcmVwbGFjZWAgb3BlcmF0aW9ucyBhcmUKLSAgICAgICAgICBnZW5lcmF0ZWQuCi0KLSAgICBA
cGFyYW1baW5dIHNvdXJjZSAgSlNPTiB2YWx1ZSB0byBjb21wYXJlIGZyb20KLSAgICBAcGFyYW1b
aW5dIHRhcmdldCAgSlNPTiB2YWx1ZSB0byBjb21wYXJlIGFnYWluc3QKLSAgICBAcGFyYW1baW5d
IHBhdGggICAgaGVscGVyIHZhbHVlIHRvIGNyZWF0ZSBKU09OIHBvaW50ZXJzCi0KLSAgICBAcmV0
dXJuIGEgSlNPTiBwYXRjaCB0byBjb252ZXJ0IHRoZSBAYSBzb3VyY2UgdG8gQGEgdGFyZ2V0Ci0K
LSAgICBAY29tcGxleGl0eSBMaW5lYXIgaW4gdGhlIGxlbmd0aHMgb2YgQGEgc291cmNlIGFuZCBA
YSB0YXJnZXQuCi0KLSAgICBAbGl2ZWV4YW1wbGV7VGhlIGZvbGxvd2luZyBjb2RlIHNob3dzIGhv
dyBhIEpTT04gcGF0Y2ggaXMgY3JlYXRlZCBhcyBhCi0gICAgZGlmZiBmb3IgdHdvIEpTT04gdmFs
dWVzLixkaWZmfQotCi0gICAgQHNhIEByZWYgcGF0Y2ggLS0gYXBwbHkgYSBKU09OIHBhdGNoCi0K
LSAgICBAc2EgW1JGQyA2OTAyIChKU09OIFBhdGNoKV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9o
dG1sL3JmYzY5MDIpCi0KLSAgICBAc2luY2UgdmVyc2lvbiAyLjAuMAotICAgICovCi0gICAgc3Rh
dGljIGJhc2ljX2pzb24gZGlmZihjb25zdCBiYXNpY19qc29uJiBzb3VyY2UsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19qc29uJiB0YXJnZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGF0aCA9ICIiKQotICAgIHsKLSAgICAg
ICAgLy8gdGhlIHBhdGNoCi0gICAgICAgIGJhc2ljX2pzb24gcmVzdWx0KHZhbHVlX3Q6OmFycmF5
KTsKLQotICAgICAgICAvLyBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSwgcmV0dXJuIGVtcHR5
IHBhdGNoCi0gICAgICAgIGlmIChzb3VyY2UgPT0gdGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNvdXJjZS50eXBl
KCkgIT0gdGFyZ2V0LnR5cGUoKSkKLSAgICAgICAgewotICAgICAgICAgICAgLy8gZGlmZmVyZW50
IHR5cGVzOiByZXBsYWNlIHZhbHVlCi0gICAgICAgICAgICByZXN1bHQucHVzaF9iYWNrKAotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHsib3AiLCAicmVwbGFjZSJ9LAotICAgICAgICAg
ICAgICAgIHsicGF0aCIsIHBhdGh9LAotICAgICAgICAgICAgICAgIHsidmFsdWUiLCB0YXJnZXR9
Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAoc291cmNlLnR5cGUoKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBjYXNlIHZhbHVlX3Q6OmFycmF5OgotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gZmlyc3QgcGFzczogdHJhdmVyc2UgY29tbW9uIGVsZW1lbnRzCi0gICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBpID0gMDsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUg
KGkgPCBzb3VyY2Uuc2l6ZSgpIGFuZCBpIDwgdGFyZ2V0LnNpemUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVjdXJzaXZlIGNhbGwgdG8gY29t
cGFyZSBhcnJheSB2YWx1ZXMgYXQgaW5kZXggaQotICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byB0ZW1wX2RpZmYgPSBkaWZmKHNvdXJjZVtpXSwgdGFyZ2V0W2ldLCBwYXRoICsgIi8iICsgc3Rk
Ojp0b19zdHJpbmcoaSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmluc2VydChy
ZXN1bHQuZW5kKCksIHRlbXBfZGlmZi5iZWdpbigpLCB0ZW1wX2RpZmYuZW5kKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgLy8gaSBub3cgcmVhY2hlZCB0aGUgZW5kIG9mIGF0IGxlYXN0IG9uZSBhcnJh
eQotICAgICAgICAgICAgICAgICAgICAvLyBpbiBhIHNlY29uZCBwYXNzLCB0cmF2ZXJzZSB0aGUg
cmVtYWluaW5nIGVsZW1lbnRzCi0KLSAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIG15IHJl
bWFpbmluZyBlbGVtZW50cwotICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGVuZF9pbmRl
eCA9IHN0YXRpY19jYXN0PGRpZmZlcmVuY2VfdHlwZT4ocmVzdWx0LnNpemUoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChpIDwgc291cmNlLnNpemUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIG9wZXJhdGlvbnMgaW4gcmV2ZXJz
ZSBvcmRlciB0byBhdm9pZCBpbnZhbGlkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmRp
Y2VzCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaW5zZXJ0KHJlc3VsdC5iZWdpbigp
ICsgZW5kX2luZGV4LCBvYmplY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgeyJvcCIsICJyZW1vdmUifSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7InBhdGgiLCBwYXRoICsgIi8iICsgc3RkOjp0b19zdHJpbmcoaSl9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK2k7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBhZGQgb3RoZXIg
cmVtYWluaW5nIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgdGFyZ2V0
LnNpemUoKSkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7Im9wIiwgImFkZCJ9LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsicGF0aCIsIHBhdGggKyAiLyIgKyBzdGQ6OnRvX3N0cmluZyhpKX0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgeyJ2YWx1ZSIsIHRhcmdldFtpXX0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgY2FzZSB2YWx1ZV90OjpvYmplY3Q6Ci0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICAvLyBmaXJzdCBwYXNzOiB0cmF2ZXJzZSB0aGlzIG9iamVj
dCdzIGVsZW1lbnRzCi0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IHNvdXJjZS5i
ZWdpbigpOyBpdCAhPSBzb3VyY2UuZW5kKCk7ICsraXQpCi0gICAgICAgICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzY2FwZSB0aGUga2V5IG5hbWUgdG8gYmUgdXNl
ZCBpbiBhIEpTT04gcGF0Y2gKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8ga2V5
ID0ganNvbl9wb2ludGVyOjplc2NhcGUoaXQua2V5KCkpOwotCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodGFyZ2V0LmZpbmQoaXQua2V5KCkpICE9IHRhcmdldC5lbmQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWN1cnNp
dmUgY2FsbCB0byBjb21wYXJlIG9iamVjdCB2YWx1ZXMgYXQga2V5IGl0Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byB0ZW1wX2RpZmYgPSBkaWZmKGl0LnZhbHVlKCksIHRhcmdldFtp
dC5rZXkoKV0sIHBhdGggKyAiLyIgKyBrZXkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5pbnNlcnQocmVzdWx0LmVuZCgpLCB0ZW1wX2RpZmYuYmVnaW4oKSwgdGVtcF9kaWZm
LmVuZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBmb3VuZCBhIGtleSB0aGF0IGlzIG5vdCBpbiBvIC0+IHJlbW92ZSBpdAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoX2JhY2sob2JqZWN0KAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyJvcCIsICJyZW1vdmUifSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJwYXRo
IiwgcGF0aCArICIvIiArIGtleX0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICAvLyBzZWNvbmQgcGFzczogdHJhdmVyc2Ugb3RoZXIgb2JqZWN0J3MgZWxl
bWVudHMKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gdGFyZ2V0LmJlZ2luKCk7
IGl0ICE9IHRhcmdldC5lbmQoKTsgKytpdCkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5maW5kKGl0LmtleSgpKSA9PSBzb3VyY2UuZW5k
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gZm91bmQgYSBrZXkgdGhhdCBpcyBub3QgaW4gdGhpcyAtPiBhZGQgaXQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBhdXRvIGtleSA9IGpzb25fcG9pbnRlcjo6ZXNjYXBl
KGl0LmtleSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaF9iYWNr
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyJvcCIsICJhZGQifSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyJwYXRoIiwgcGF0aCArICIvIiArIGtleX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsidmFsdWUiLCBpdC52YWx1ZSgpfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IGJvdGggcHJpbWl0aXZlIHR5cGU6IHJlcGxhY2UgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LnB1c2hfYmFjaygKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICAgICAgeyJvcCIsICJyZXBsYWNlIn0sCi0gICAgICAgICAgICAgICAgICAgICAgICB7InBh
dGgiLCBwYXRofSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsidmFsdWUiLCB0YXJnZXR9Ci0g
ICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLQotICAgIC8vLyBAfQotfTsKLQotLy8vLy8vLy8vLy8vLwotLy8gcHJl
c2V0cyAvLwotLy8vLy8vLy8vLy8vLwotCi0vKiEKLUBicmllZiBkZWZhdWx0IEpTT04gY2xhc3MK
LQotVGhpcyB0eXBlIGlzIHRoZSBkZWZhdWx0IHNwZWNpYWxpemF0aW9uIG9mIHRoZSBAcmVmIGJh
c2ljX2pzb24gY2xhc3Mgd2hpY2gKLXVzZXMgdGhlIHN0YW5kYXJkIHRlbXBsYXRlIHR5cGVzLgot
Ci1Ac2luY2UgdmVyc2lvbiAxLjAuMAotKi8KLXVzaW5nIGpzb24gPSBiYXNpY19qc29uPD47Ci19
IC8vIG5hbWVzcGFjZSBubG9obWFubgotCi0KLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vLyBu
b25tZW1iZXIgc3VwcG9ydCAvLwotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotLy8gc3BlY2lh
bGl6YXRpb24gb2Ygc3RkOjpzd2FwLCBhbmQgc3RkOjpoYXNoCi1uYW1lc3BhY2Ugc3RkCi17Ci0v
KiEKLUBicmllZiBleGNoYW5nZXMgdGhlIHZhbHVlcyBvZiB0d28gSlNPTiBvYmplY3RzCi0KLUBz
aW5jZSB2ZXJzaW9uIDEuMC4wCi0qLwotdGVtcGxhdGU8PgotaW5saW5lIHZvaWQgc3dhcChubG9o
bWFubjo6anNvbiYgajEsCi0gICAgICAgICAgICAgICAgIG5sb2htYW5uOjpqc29uJiBqMikgbm9l
eGNlcHQoCi0gICAgICAgICAgICAgICAgICAgICBpc19ub3Rocm93X21vdmVfY29uc3RydWN0aWJs
ZTxubG9obWFubjo6anNvbj46OnZhbHVlIGFuZAotICAgICAgICAgICAgICAgICAgICAgaXNfbm90
aHJvd19tb3ZlX2Fzc2lnbmFibGU8bmxvaG1hbm46Ompzb24+Ojp2YWx1ZQotICAgICAgICAgICAg
ICAgICApCi17Ci0gICAgajEuc3dhcChqMik7Ci19Ci0KLS8vLyBoYXNoIHZhbHVlIGZvciBKU09O
IG9iamVjdHMKLXRlbXBsYXRlPD4KLXN0cnVjdCBoYXNoPG5sb2htYW5uOjpqc29uPgotewotICAg
IC8qIQotICAgIEBicmllZiByZXR1cm4gYSBoYXNoIHZhbHVlIGZvciBhIEpTT04gb2JqZWN0Ci0K
LSAgICBAc2luY2UgdmVyc2lvbiAxLjAuMAotICAgICovCi0gICAgc3RkOjpzaXplX3Qgb3BlcmF0
b3IoKShjb25zdCBubG9obWFubjo6anNvbiYgaikgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIGEg
bmFpdmUgaGFzaGluZyB2aWEgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbgotICAgICAgICBjb25z
dCBhdXRvJiBoID0gaGFzaDxubG9obWFubjo6anNvbjo6c3RyaW5nX3Q+KCk7Ci0gICAgICAgIHJl
dHVybiBoKGouZHVtcCgpKTsKLSAgICB9Ci19OwotfSAvLyBuYW1lc3BhY2Ugc3RkCi0KLS8qIQot
QGJyaWVmIHVzZXItZGVmaW5lZCBzdHJpbmcgbGl0ZXJhbCBmb3IgSlNPTiB2YWx1ZXMKLQotVGhp
cyBvcGVyYXRvciBpbXBsZW1lbnRzIGEgdXNlci1kZWZpbmVkIHN0cmluZyBsaXRlcmFsIGZvciBK
U09OIG9iamVjdHMuIEl0Ci1jYW4gYmUgdXNlZCBieSBhZGRpbmcgYCJfanNvbiJgIHRvIGEgc3Ry
aW5nIGxpdGVyYWwgYW5kIHJldHVybnMgYSBKU09OIG9iamVjdAotaWYgbm8gcGFyc2UgZXJyb3Ig
b2NjdXJyZWQuCi0KLUBwYXJhbVtpbl0gcyAgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBK
U09OIG9iamVjdAotQHBhcmFtW2luXSBuICB0aGUgbGVuZ3RoIG9mIHN0cmluZyBAYSBzCi1AcmV0
dXJuIGEgSlNPTiBvYmplY3QKLQotQHNpbmNlIHZlcnNpb24gMS4wLjAKLSovCi1pbmxpbmUgbmxv
aG1hbm46Ompzb24gb3BlcmF0b3IgIiIgX2pzb24oY29uc3QgY2hhciogcywgc3RkOjpzaXplX3Qg
bikKLXsKLSAgICByZXR1cm4gbmxvaG1hbm46Ompzb246OnBhcnNlKHMsIHMgKyBuKTsKLX0KLQot
LyohCi1AYnJpZWYgdXNlci1kZWZpbmVkIHN0cmluZyBsaXRlcmFsIGZvciBKU09OIHBvaW50ZXIK
LQotVGhpcyBvcGVyYXRvciBpbXBsZW1lbnRzIGEgdXNlci1kZWZpbmVkIHN0cmluZyBsaXRlcmFs
IGZvciBKU09OIFBvaW50ZXJzLiBJdAotY2FuIGJlIHVzZWQgYnkgYWRkaW5nIGAiX2pzb25fcG9p
bnRlciJgIHRvIGEgc3RyaW5nIGxpdGVyYWwgYW5kIHJldHVybnMgYSBKU09OIHBvaW50ZXIKLW9i
amVjdCBpZiBubyBwYXJzZSBlcnJvciBvY2N1cnJlZC4KLQotQHBhcmFtW2luXSBzICBhIHN0cmlu
ZyByZXByZXNlbnRhdGlvbiBvZiBhIEpTT04gUG9pbnRlcgotQHBhcmFtW2luXSBuICB0aGUgbGVu
Z3RoIG9mIHN0cmluZyBAYSBzCi1AcmV0dXJuIGEgSlNPTiBwb2ludGVyIG9iamVjdAotCi1Ac2lu
Y2UgdmVyc2lvbiAyLjAuMAotKi8KLWlubGluZSBubG9obWFubjo6anNvbjo6anNvbl9wb2ludGVy
IG9wZXJhdG9yICIiIF9qc29uX3BvaW50ZXIoY29uc3QgY2hhciogcywgc3RkOjpzaXplX3QgbikK
LXsKLSAgICByZXR1cm4gbmxvaG1hbm46Ompzb246Ompzb25fcG9pbnRlcihzdGQ6OnN0cmluZyhz
LCBuKSk7Ci19Ci0KLS8vIHJlc3RvcmUgR0NDL2NsYW5nIGRpYWdub3N0aWMgc2V0dGluZ3MKLSNp
ZiBkZWZpbmVkKF9fY2xhbmdfXykgfHwgZGVmaW5lZChfX0dOVUNfXykgfHwgZGVmaW5lZChfX0dO
VUdfXykKLSAgICAjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAotI2VuZGlmCi0KLS8vIGNsZWFu
IHVwCi0jdW5kZWYgSlNPTl9DQVRDSAotI3VuZGVmIEpTT05fREVQUkVDQVRFRAotI3VuZGVmIEpT
T05fVEhST1cKLSN1bmRlZiBKU09OX1RSWQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDVkZDE4
YjAyNTEzMjM2OGFmZmNlNDk0ZmQ1ZTIzOGVjZTM4Y2EwZjIuLjZmNjNmNDM0ZTY2ZTRkMDg4ZGY4
OTAwMGViNThmYWRhNDcyZWI1NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtNzEsMTMgKzcxLDYgQEAgTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlU3RhdGlzdGljcy5jcHAKIE5ldHdvcmtQcm9j
ZXNzL2NhY2hlL05ldHdvcmtDYWNoZVN0b3JhZ2UuY3BwCiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGVTdWJyZXNvdXJjZXNFbnRyeS5jcHAKIAotTmV0d29ya1Byb2Nlc3MvY2FwdHVy
ZS9OZXR3b3JrQ2FwdHVyZUV2ZW50LmNwcAotTmV0d29ya1Byb2Nlc3MvY2FwdHVyZS9OZXR3b3Jr
Q2FwdHVyZU1hbmFnZXIuY3BwCi1OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJl
UmVjb3JkZXIuY3BwCi1OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVwbGF5
ZXIuY3BwCi1OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3Bw
Ci1OZXR3b3JrUHJvY2Vzcy9jYXB0dXJlL05ldHdvcmtEYXRhVGFza1JlcGxheS5jcHAKLQogTmV0
d29ya1Byb2Nlc3Mvd2VicnRjL05ldHdvcmtNRE5TUmVnaXN0ZXIuY3BwCiAKIC8vIFRPRE86IFdl
IHNob3VsZCB1bmlmeSB0aGVzZSBmaWxlcyBvbmNlIEdUSydzIFBsdWdpblByb2Nlc3MyIGlzIHJl
bW92ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9j
ZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vz
c1Bvb2xDb2NvYS5tbQppbmRleCA4OTk1YTY5OTlhNGY5MTY2MGU0ZTYzOWMwYWVhMjY4NzA0OTM2
MzlmLi4yODVlNTg4MjM4MWQxOGRmNzI4YmQzMDhhYTgwMTkzYzkyNGIwZDI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0K
QEAgLTgwLDExICs4MCw2IEBAIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdlYktpdFN1cHByZXNz
TWVtb3J5UHJlc3N1cmVIYW5kbGVyRGVmYXVsdHNLZXkgPSBAIldlYktpCiBzdGF0aWMgTlNTdHJp
bmcgKiBjb25zdCBXZWJLaXRMb2dDb29raWVJbmZvcm1hdGlvbkRlZmF1bHRzS2V5ID0gQCJXZWJL
aXRMb2dDb29raWVJbmZvcm1hdGlvbiI7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShORVRXT1JLX0NB
UFRVUkUpCi1zdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXZWJLaXRSZWNvcmRSZXBsYXlNb2RlRGVm
YXVsdHNLZXkgPSBAIldlYktpdFJlY29yZFJlcGxheU1vZGUiOwotc3RhdGljIE5TU3RyaW5nICog
Y29uc3QgV2ViS2l0UmVjb3JkUmVwbGF5Q2FjaGVMb2NhdGlvbkRlZmF1bHRzS2V5ID0gQCJXZWJL
aXRSZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uIjsKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0yODcsMTMgKzI4Miw2IEBAIHZvaWQg
V2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKE5ldHdvcmtQ
cm9jZXNzQ3JlYXRpb25QYXJhCiAgICAgcGFyYW1ldGVycy5zdG9yYWdlQWNjZXNzQVBJRW5hYmxl
ZCA9IHN0b3JhZ2VBY2Nlc3NBUElFbmFibGVkKCk7CiAgICAgcGFyYW1ldGVycy5zdXBwcmVzc2Vz
Q29ubmVjdGlvblRlcm1pbmF0aW9uT25TeXN0ZW1DaGFuZ2UgPSBtX2NvbmZpZ3VyYXRpb24tPnN1
cHByZXNzZXNDb25uZWN0aW9uVGVybWluYXRpb25PblN5c3RlbUNoYW5nZSgpOwogCi0jaWYgRU5B
QkxFKE5FVFdPUktfQ0FQVFVSRSkKLSAgICBwYXJhbWV0ZXJzLnJlY29yZFJlcGxheU1vZGUgPSBb
ZGVmYXVsdHMgc3RyaW5nRm9yS2V5OldlYktpdFJlY29yZFJlcGxheU1vZGVEZWZhdWx0c0tleV07
Ci0gICAgcGFyYW1ldGVycy5yZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uID0gW2RlZmF1bHRzIHN0
cmluZ0ZvcktleTpXZWJLaXRSZWNvcmRSZXBsYXlDYWNoZUxvY2F0aW9uRGVmYXVsdHNLZXldOwot
ICAgIGlmIChwYXJhbWV0ZXJzLnJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24uaXNFbXB0eSgpKQot
ICAgICAgICBwYXJhbWV0ZXJzLnJlY29yZFJlcGxheUNhY2hlTG9jYXRpb24gPSBwYXJhbWV0ZXJz
LmRpc2tDYWNoZURpcmVjdG9yeTsKLSNlbmRpZgotCiAjaWYgRU5BQkxFKFBST1hJTUlUWV9ORVRX
T1JLSU5HKQogICAgIHBhcmFtZXRlcnMud2lyZWxlc3NDb250ZXh0SWRlbnRpZmllciA9IG1fY29u
ZmlndXJhdGlvbi0+d2lyZWxlc3NDb250ZXh0SWRlbnRpZmllcigpOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhYzk0ZDkz
NjVmOGIzNDNlZDc0Y2M1MWJmNmJlMmE5YmE4Yzk4OWQxLi5kNzk3MTU2ZDQxNTg0NDE5OWJkY2Qz
ZWQxM2E3YjdmMzYzNjI3Y2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTEwMDUsMTggKzEwMDUsMTAgQEAKIAkJNTI4QzM3QzExOTVD
QkIxQTAwRDhCOUNDIC8qIFdLQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE5RjI4MTAxOTU4RjQ3ODAwOENBQzcy
IC8qIFdLQmFja0ZvcndhcmRMaXN0UHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUyRDVBMUIwMUM1NzQ5NUEwMERFMzRBMyAvKiBWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyRDVBMUFBMUM1NzQ5NEUwMERFMzRBMyAvKiBWaWRlb0Z1bGxzY3Jl
ZW5NYW5hZ2VyUHJveHkuaCAqLzsgfTsKIAkJNTJGMDYwRTExNjU0MzE4NTAwRjMyODFCIC8qIE5l
dHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyRjA2MEREMTY1NDMxNzUwMEYz
MjgxQiAvKiBOZXR3b3JrQ29udGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAg
Ki87IH07Ci0JCTUzMDI1ODNDMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291
cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAy
NTgyRjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5oICovOyB9Owot
CQk1MzAyNTgzRTFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVFdmVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzExRENCQkQx
RDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuaCAqLzsgfTsKLQkJNTMwMjU4M0YxRENC
QkQyMjAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4MzIxRENCQkQxRDAwREE4OUMyIC8q
IE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oICovOyB9OwotCQk1MzAyNTg0MTFEQ0JCRDIyMDBEQTg5
QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MzAyNTgzNDFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0Nh
cHR1cmVNYW5hZ2VyLmggKi87IH07Ci0JCTUzMDI1ODQzMURDQkJEMjIwMERBODlDMiAvKiBOZXR3
b3JrQ2FwdHVyZVJlY29yZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MzAyNTgzNjFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZWNv
cmRlci5oICovOyB9OwotCQk1MzAyNTg0NTFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1
cmVSZXBsYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTMwMjU4MzgxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCAq
LzsgfTsKLQkJNTMwMjU4NDcxRENCQkQyMjAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1JlcGxh
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMwMjU4
M0ExRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtEYXRhVGFza1JlcGxheS5oICovOyB9OwogCQk1
MzIxNTk1NTFEQkFFNzI5MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2NvYS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTMyMTU5NTAxREJBRTZENzAw
NTRBQTNDIC8qIE5ldHdvcmtTZXNzaW9uQ29jb2EuaCAqLzsgfTsKIAkJNTMyMTU5NTYxREJBRTcy
RDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzIxNTk0RjFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0
d29ya0RhdGFUYXNrQ29jb2EuaCAqLzsgfTsKIAkJNTM1QkNCOTIyMDY5QzQ5QzAwQ0NDRTAyIC8q
IE5ldHdvcmtBY3Rpdml0eVRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUzNUJDQjkwMjA2OUM0OUMwMENDQ0UwMiAvKiBOZXR3b3JrQWN0aXZp
dHlUcmFja2VyLmggKi87IH07CiAJCTUzQkE0N0QxMURDMkVGNUUwMDRERjRBRCAvKiBOZXR3b3Jr
RGF0YVRhc2tCbG9iLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MzlFQjU0NzFEQzJFRTQwMDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oICov
OyB9OwotCQk1M0RFQTM2NjFEREU0MjMxMDBFODI2NDggLyoganNvbi5ocHAgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0RFQTM2NTFEREU0MjJFMDBFODI2
NDggLyoganNvbi5ocHAgKi87IH07CiAJCTU3MEFCOEYzMjBBRTNCRDcwMEI4QkU4NyAvKiBTZWNL
ZXlQcm94eVN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NzBBQjhGMjIwQUUzQkQ3MDBCOEJFODcgLyogU2VjS2V5UHJveHlTdG9yZS5oICovOyB9
OwogCQk1NzU5N0VCOTIxODExRDlBMDAzN0Y5MjQgLyogQ3RhcEhpZERyaXZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc1OTdFQjcyMTgxMUQ5QTAw
MzdGOTI0IC8qIEN0YXBIaWREcml2ZXIuaCAqLzsgfTsKIAkJNTc1OTdFQkQyMTgxODQ5MDAwMzdG
OTI0IC8qIEN0YXBIaWRBdXRoZW50aWNhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NzU5N0VCQjIxODE4NDhGMDAzN0Y5MjQgLyogQ3RhcEhpZEF1
dGhlbnRpY2F0b3IuaCAqLzsgfTsKQEAgLTMzNDUsMTkgKzMzMzcsNiBAQAogCQk1MkQ1QTFCMzFD
NTc0OUYyMDBERTM0QTMgLyogVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkQ1QTFCNDFDNTc0OUYyMDBERTM0QTMgLyog
VmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUyRjA2MEREMTY1NDMxNzUwMEYzMjgxQiAvKiBOZXR3b3JrQ29udGVudFJ1bGVM
aXN0TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBOZXR3b3Jr
Q29udGVudFJ1bGVMaXN0TWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHA7IHBhdGggPSBEZXJpdmVk
U291cmNlcy9XZWJLaXQyL05ldHdvcmtDb250ZW50UnVsZUxpc3RNYW5hZ2VyTWVzc2FnZVJlY2Vp
dmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKLQkJNTMwMjU4MkUx
RENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzMDI1ODJGMURDQkJEMUQwMERBODlDMiAvKiBO
ZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTMwMjU4MzAxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0NhcHR1cmVFdmVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzMDI1ODMxMURDQkJEMUQwMERBODlDMiAv
KiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IE5ldHdvcmtDYXB0dXJlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTMw
MjU4MzIxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9nZ2luZy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrQ2FwdHVyZUxvZ2dpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTMwMjU4MzMxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdv
cmtDYXB0dXJlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBOZXR3b3JrQ2FwdHVyZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MzAyNTgzNDFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2VyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5ldHdvcmtDYXB0dXJlTWFuYWdlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MzAyNTgzNTFEQ0JCRDFEMDBEQTg5QzIgLyog
TmV0d29ya0NhcHR1cmVSZWNvcmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBOZXR3b3JrQ2FwdHVyZVJlY29yZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTMwMjU4MzYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVjb3Jk
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0NhcHR1cmVSZWNv
cmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MzAyNTgzNzFEQ0JCRDFEMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQ2FwdHVyZVJlcGxheWVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTMwMjU4MzgxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0
dXJlUmVwbGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0Nh
cHR1cmVSZXBsYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MzAyNTgzOTFE
Q0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtEYXRhVGFza1JlcGxheS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUzMDI1ODNBMURDQkJEMUQwMERBODlDMiAvKiBOZXR3
b3JrRGF0YVRhc2tSZXBsYXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0
d29ya0RhdGFUYXNrUmVwbGF5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMTU4
NzZCMjA3NkI3MTMwMDRCRjlGMyAvKiBOZXR3b3JrQWN0aXZpdHlUcmFja2VyQ29jb2EubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBOZXR3b3JrQWN0aXZpdHlUcmFj
a2VyQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzMjE1OTRGMURCQUU2
RDcwMDU0QUEzQyAvKiBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBOZXR3b3JrRGF0YVRhc2tDb2NvYS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MzIxNTk1MDFEQkFFNkQ3MDA1NEFBM0MgLyogTmV0d29ya1Nlc3Npb25Db2Nv
YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOZXR3b3JrU2Vzc2lvbkNvY29h
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzY2LDcgKzMzNDUsNiBAQAogCQk1
MzVCQ0I5MDIwNjlDNDlDMDBDQ0NFMDIgLyogTmV0d29ya0FjdGl2aXR5VHJhY2tlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBOZXR3b3JrQWN0aXZpdHlUcmFja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUzOUVCNTQ2MURDMkVFNDAwMDlENDhDRiAvKiBOZXR3b3JrRGF0YVRhc2tCbG9i
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtEYXRhVGFz
a0Jsb2IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MzlFQjU0NzFEQzJFRTQw
MDA5RDQ4Q0YgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBOZXR3b3JrRGF0YVRhc2tCbG9iLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTUzREVBMzY1MURERTQyMkUwMEU4MjY0OCAvKiBqc29uLmhwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmg7IHBhdGggPSBqc29uLmhwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTNGM0NBQTUyMDZDNDQzRTAwODY0OTBFIC8qIE5ldHdvcmtBY3Rpdml0eVRyYWNrZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0FjdGl2aXR5
VHJhY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MEFCOEYyMjBBRTNC
RDcwMEI4QkU4NyAvKiBTZWNLZXlQcm94eVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY0tleVBy
b3h5U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwQUI5MDAyMEIyNTE3
NDAwQjhCRTg3IC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHlDb2NvYS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHlDb2NvYS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0MDMsNyArNjM4MSw2IEBACiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUU0ODlEMjgyMUEwQTJCRTgwMDc4QzA2QSAv
KiBjYWNoZSAqLywKLQkJCQk1MzlCRDVCMjFEQURCMEJBMDBGMkU0RTEgLyogY2FwdHVyZSAqLywK
IAkJCQk3RUM0RjBGODE4RTRBOTIyMDA4MDU2QUYgLyogY29jb2EgKi8sCiAJCQkJMzMwOTM0NEIx
MzE1QjkzQTAwOTdBN0JDIC8qIENvb2tpZXMgKi8sCiAJCQkJNUMxNDI2RjIxQzIzRjgyRDAwRDQx
MTgzIC8qIEN1c3RvbVByb3RvY29scyAqLywKQEAgLTY2NjgsMjcgKzY2NDUsNiBAQAogCQkJcGF0
aCA9IGlvczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTUzOUJENUIyMURB
REIwQkEwMEYyRTRFMSAvKiBjYXB0dXJlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQlj
aGlsZHJlbiA9ICgKLQkJCQk1M0RFQTM2NTFEREU0MjJFMDBFODI2NDggLyoganNvbi5ocHAgKi8s
Ci0JCQkJNTMwMjU4MzAxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlRXZlbnQuY3Bw
ICovLAotCQkJCTUzMDI1ODMxMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50
LmggKi8sCi0JCQkJNTMwMjU4MzIxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlTG9n
Z2luZy5oICovLAotCQkJCTUzMDI1ODMzMURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVy
ZU1hbmFnZXIuY3BwICovLAotCQkJCTUzMDI1ODM0MURDQkJEMUQwMERBODlDMiAvKiBOZXR3b3Jr
Q2FwdHVyZU1hbmFnZXIuaCAqLywKLQkJCQk1MzAyNTgzNTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0
d29ya0NhcHR1cmVSZWNvcmRlci5jcHAgKi8sCi0JCQkJNTMwMjU4MzYxRENCQkQxRDAwREE4OUMy
IC8qIE5ldHdvcmtDYXB0dXJlUmVjb3JkZXIuaCAqLywKLQkJCQk1MzAyNTgzNzFEQ0JCRDFEMDBE
QTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXBsYXllci5jcHAgKi8sCi0JCQkJNTMwMjU4MzgxRENC
QkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCAqLywKLQkJCQk1MzAyNTgy
RTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVSZXNvdXJjZS5jcHAgKi8sCi0JCQkJ
NTMwMjU4MkYxRENCQkQxRDAwREE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVzb3VyY2UuaCAqLywK
LQkJCQk1MzAyNTgzOTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVwbGF5LmNw
cCAqLywKLQkJCQk1MzAyNTgzQTFEQ0JCRDFEMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVw
bGF5LmggKi8sCi0JCQkpOwotCQkJcGF0aCA9IGNhcHR1cmU7Ci0JCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwotCQl9OwogCQk1NzBBQjhGNjIwQUU4MUFCMDBCOEJFODcgLyogY29jb2EgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtOTA3Myw3ICs5MDI5LDYg
QEAKIAkJCQkyRDREMkM4MTFERjYwQkYzMDAyRUIxMEMgLyogSW50ZXJhY3Rpb25JbmZvcm1hdGlv
blJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRTQ5QTQ5MTFGRkE4Q0UwMDQ4QjQ2NCAv
KiBKU05QTWV0aG9kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUU0OTg3ODExRkY3RkFBMDA0OEI0
NjQgLyogSlNOUE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTNERUEzNjYxRERFNDIzMTAw
RTgyNjQ4IC8qIGpzb24uaHBwIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFMDkzNzgxNEZCMTI4QzAw
MTEzOEQ5IC8qIExheWVySG9zdGluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEMz
NjVBMThDMDU1NTgwMEY2MDdENyAvKiBMYXllclJlcHJlc2VudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQTkyREMxMTEyRjhCQTQ2MDAxN0FGNjUgLyogTGF5ZXJUcmVlQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC05MTM2LDE5ICs5MDkxLDEyIEBACiAJCQkJODM0QjI1MTIxQTg0MkM4
NzAwQ0ZCMTUwIC8qIE5ldHdvcmtDYWNoZVN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUU0NDM2RUNGMUEwRDA0MEIwMEVBRDIwNCAvKiBOZXR3b3JrQ2FjaGVTdG9yYWdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4MzEwNDI4QjFCRDZCNjZGMDBBNzE1RTQgLyogTmV0d29ya0NhY2hlU3Vi
cmVzb3VyY2VzRW50cnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTUzMDI1ODNFMURDQkJEMjIwMERB
ODlDMiAvKiBOZXR3b3JrQ2FwdHVyZUV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MzAyNTgz
RjFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVMb2dnaW5nLmggaW4gSGVhZGVycyAq
LywKLQkJCQk1MzAyNTg0MTFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0NhcHR1cmVNYW5hZ2Vy
LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MzAyNTg0MzFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29y
a0NhcHR1cmVSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTMwMjU4NDUxRENCQkQyMjAw
REE4OUMyIC8qIE5ldHdvcmtDYXB0dXJlUmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTUz
MDI1ODNDMURDQkJEMjIwMERBODlDMiAvKiBOZXR3b3JrQ2FwdHVyZVJlc291cmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTNBMTY0RDE2MzBBOUJGMDA1RDdEMjIgLyogTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxREQ5RjI5MTYzNjdEQTIwMDE1
NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0NkRGMDYzQzFGMzkwNUY4MDAxOTgwQkIgLyogTmV0d29ya0NPUlNQcmVmbGln
aHRDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0JDOUI4RTFDNjUyQ0EwMDBBOEZEQ0Yg
LyogTmV0d29ya0RhdGFUYXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0JBNDdEMTFEQzJFRjVF
MDA0REY0QUQgLyogTmV0d29ya0RhdGFUYXNrQmxvYi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTMy
MTU5NTYxREJBRTcyRDAwNTRBQTNDIC8qIE5ldHdvcmtEYXRhVGFza0NvY29hLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk1MzAyNTg0NzFEQ0JCRDIyMDBEQTg5QzIgLyogTmV0d29ya0RhdGFUYXNrUmVw
bGF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Mzk5MDIwMzFCRTlBMDJCMDAwRjM2NTMgLyogTmV0
d29ya0xvYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgzRDQ1NEQ3MUJFOUQzQzQwMDZDOTNCRCAv
KiBOZXR3b3JrTG9hZENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM5MTQ5NjUxQkVBODM4
NTAwRDJEOTUzIC8qIE5ldHdvcmtMb2FkUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2NvbmZpZy5oIGIvU291cmNlL1dlYktpdC9jb25maWcuaApp
bmRleCAzODMzMWM2ODZjNDBlMGVjNzY2M2Y2ZWI3MzM0NTEzMzNjYmUwZmI5Li5mMTg0MTZmMWUx
MmZhNTI2ZDhkZmRkYzBhYjlmNDdkZjlmZmEyZWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2NvbmZpZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY29uZmlnLmgKQEAgLTg5LDEyICs4OSw2IEBA
CiAjZW5kaWYKICNlbmRpZgogCi0jaWZuZGVmIEVOQUJMRV9ORVRXT1JLX0NBUFRVUkUKLSNpZiBQ
TEFURk9STShDT0NPQSkKLSNkZWZpbmUgRU5BQkxFX05FVFdPUktfQ0FQVFVSRSAxCi0jZW5kaWYK
LSNlbmRpZgotCiAjaWZuZGVmIEVOQUJMRV9ORVRXT1JLX0NBQ0hFX1NQRUNVTEFUSVZFX1JFVkFM
SURBVElPTgogI2lmIChQTEFURk9STShDT0NPQSkgfHwgUExBVEZPUk0oR1RLKSkKICNkZWZpbmUg
RU5BQkxFX05FVFdPUktfQ0FDSEVfU1BFQ1VMQVRJVkVfUkVWQUxJREFUSU9OIDEK
</data>

          </attachment>
      

    </bug>

</bugzilla>