<?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>150854</bug_id>
          
          <creation_ts>2015-11-03 13:32:35 -0800</creation_ts>
          <short_desc>Remove LegacyIDB</short_desc>
          <delta_ts>2016-02-25 15:01:26 -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>WebCore Misc.</component>
          <version>Safari 9</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149117</blocked>
    
    <blocked>151890</blocked>
    
    <blocked>154273</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ryanhaddad</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1139056</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-03 13:32:35 -0800</bug_when>
    <thetext>Remove LegacyIDB

This includes:
-Removing the legacy/* directory
-Removing the layer of inheritance between the abstract &quot;IDBFoo&quot; and &quot;IDBFooImpl&quot; objects
-Doing a sweep of Deprecated::ScriptValue to JSValue replacement in those IDBFoo interfaces
-Probably other stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1144553</commentid>
    <comment_count>1</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2015-11-26 21:32:11 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; Remove LegacyIDB
&gt; 
&gt; This includes:
&gt; -Removing the legacy/* directory
&gt; -Removing the layer of inheritance between the abstract &quot;IDBFoo&quot; and
&gt; &quot;IDBFooImpl&quot; objects
&gt; -Doing a sweep of Deprecated::ScriptValue to JSValue replacement in those
&gt; IDBFoo interfaces
&gt; -Probably other stuff

-Remove unnecessary cruft from IDBGetResult (marked by a fixme with this bug #)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162085</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-04 11:36:32 -0800</bug_when>
    <thetext>*** Bug 153848 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162087</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-04 11:36:38 -0800</bug_when>
    <thetext>*** Bug 153849 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162090</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-04 11:37:12 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; (In reply to comment #0)
&gt; &gt; Remove LegacyIDB
&gt; &gt; 
&gt; &gt; This includes:
&gt; &gt; -Removing the legacy/* directory
&gt; &gt; -Removing the layer of inheritance between the abstract &quot;IDBFoo&quot; and
&gt; &gt; &quot;IDBFooImpl&quot; objects
&gt; &gt; -Doing a sweep of Deprecated::ScriptValue to JSValue replacement in those
&gt; &gt; IDBFoo interfaces
&gt; &gt; -Probably other stuff
&gt; 
&gt; -Remove unnecessary cruft from IDBGetResult (marked by a fixme with this bug
&gt; #)

Removing the current WK2 specific TestExpectations for IndexedDB tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168162</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-25 11:39:52 -0800</bug_when>
    <thetext>After http://trac.webkit.org/changeset/197122, Legacy IDB is no longer needed.

I&apos;m writing the patch today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168174</commentid>
    <comment_count>6</comment_count>
      <attachid>272223</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-25 12:03:27 -0800</bug_when>
    <thetext>Created attachment 272223
Patch v1

Ready for review now.

No cq? because I want all EWS to run first</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168178</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-02-25 12:22:30 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #1)
&gt; &gt; (In reply to comment #0)
&gt; &gt; &gt; Remove LegacyIDB
&gt; &gt; &gt; 
&gt; &gt; &gt; This includes:
&gt; &gt; &gt; -Removing the legacy/* directory
&gt; &gt; &gt; -Removing the layer of inheritance between the abstract &quot;IDBFoo&quot; and
&gt; &gt; &gt; &quot;IDBFooImpl&quot; objects
&gt; &gt; &gt; -Doing a sweep of Deprecated::ScriptValue to JSValue replacement in those
&gt; &gt; &gt; IDBFoo interfaces
&gt; &gt; &gt; -Probably other stuff
&gt; &gt; 
&gt; &gt; -Remove unnecessary cruft from IDBGetResult (marked by a fixme with this bug
&gt; &gt; #)
&gt; 
&gt; Removing the current WK2 specific TestExpectations for IndexedDB tests


Most of these things weren&apos;t directly addressed in the huge patch up for review right now.

That&apos;s okay.

They&apos;ll come later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168218</commentid>
    <comment_count>8</comment_count>
      <attachid>272223</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-25 14:19:04 -0800</bug_when>
    <thetext>Comment on attachment 272223
Patch v1

Clearing flags on attachment: 272223

Committed r197131: &lt;http://trac.webkit.org/changeset/197131&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168219</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-25 14:19:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168250</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-02-25 15:01:26 -0800</bug_when>
    <thetext>Congratulations Brady!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272223</attachid>
            <date>2016-02-25 12:03:27 -0800</date>
            <delta_ts>2016-02-25 14:19:04 -0800</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>774433</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggOWM2NmQxYS4uOThiZjM4YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTEwLDcgKzEwLDYgQEAgc2V0KFdlYkNvcmVfSU5DTFVERV9ESVJFQ1RPUklFUwog
ICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2dlb2xvY2F0aW9uIgogICAgICIke1dFQkNPUkVf
RElSfS9Nb2R1bGVzL2luZGV4ZWRkYiIKICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50IgotICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlciIKICAgICAi
JHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkIgogICAgICIke1dFQkNPUkVf
RElSfS9Nb2R1bGVzL2luZGlldWkiCkBAIC04MzEsNyArODMwLDYgQEAgc2V0KFdlYkNvcmVfU09V
UkNFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAogICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlRXhjZXB0aW9uLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZU1ldGFkYXRhLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkV2ZW50RGlzcGF0Y2hl
ci5jcHAKICAgICBNb2R1bGVzL2luZGV4ZWRkYi9JREJGYWN0b3J5LmNwcAogICAgIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkdldFJlc3VsdC5jcHAKQEAgLTg2MywyNiArODYxLDYgQEAgc2V0KFdlYkNv
cmVfU09VUkNFUwogICAgIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9JREJWZXJzaW9uQ2hhbmdl
RXZlbnRJbXBsLmNwcAogICAgIE1vZHVsZXMvaW5kZXhlZGRiL2NsaWVudC9UcmFuc2FjdGlvbk9w
ZXJhdGlvbi5jcHAKIAotICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNr
ZW5kLmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kT3Bl
cmF0aW9ucy5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VCYWNr
ZW5kLmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxiYWNr
c0ltcGwuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdUcmFuc2Fj
dGlvbk1vbml0b3IuY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0
aW9uQmFja2VuZC5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rp
b25CYWNrZW5kT3BlcmF0aW9ucy5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5QW55LmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lDdXJzb3Iu
Y3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNvcldpdGhWYWx1ZS5j
cHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2UuY3BwCi0gICAg
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUZhY3RvcnkuY3BwCi0gICAgTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0xlZ2FjeUluZGV4LmNwcAotICAgIE1vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lPYmplY3RTdG9yZS5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVn
YWN5UmVxdWVzdC5jcHAKLSAgICBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VHJhbnNh
Y3Rpb24uY3BwCi0gICAgTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVZlcnNpb25DaGFu
Z2VFdmVudC5jcHAKLQogICAgIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJDb25uZWN0aW9u
VG9DbGllbnQuY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcmlhbGl6YXRp
b24uY3BwCiAgICAgTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCBmZTM1OTgzLi5hMDg5MDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTMgQEAKKzIw
MTYtMDItMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAgIFJl
bW92ZSBMZWdhY3lJREIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTA4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBObyBuZXcgdGVzdHMgKE5vIGNoYW5nZSBpbiBiZWhhdmlvcikuCisKKyAgICAgICAg
KiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9ET01XaW5kb3dJ
bmRleGVkRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93SW5kZXhlZERh
dGFiYXNlOjppbmRleGVkREIpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlTWV0YWRhdGEuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkRhdGFiYXNlTWV0YWRhdGEuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJGYWN0b3J5Lmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaDoK
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleE1ldGFkYXRhLmg6IFJlbW92ZWQu
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVNZXRhZGF0YS5oOiBS
ZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9wZXJhdGlvbi5oOiBSZW1v
dmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rpb24uaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oOgor
ICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckdsb2JhbFNjb3BlSW5kZXhlZERhdGFi
YXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtlckdsb2JhbFNjb3BlSW5kZXhlZERhdGFi
YXNlOjppbmRleGVkREIpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckdsb2Jh
bFNjb3BlSW5kZXhlZERhdGFiYXNlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVn
YWN5L0lEQkNhbGxiYWNrcy5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvSURCQ3Vyc29yQmFja2VuZC5oOiBSZW1vdmVkLgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJh
Y2tlbmRPcGVyYXRpb25zLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0lEQkRhdGFiYXNlQmFja2VuZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNlQmFja2VuZC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxiYWNrcy5oOiBSZW1v
dmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGwuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGluZ0RlbGV0ZUNhbGwu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGlu
Z09wZW5DYWxsLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmg6IFJl
bW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9u
QmFja2VuZC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0lEQlRyYW5zYWN0aW9uQmFja2VuZC5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kT3BlcmF0aW9ucy5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOiBSZW1v
dmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lBbnkuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lBbnkuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29y
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5
Q3Vyc29yLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeUN1cnNvcldpdGhWYWx1ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNvcldpdGhWYWx1ZS5oOiBSZW1vdmVkLgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmg6IFJlbW92
ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUZhY3RvcnkuY3Bw
OiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lGYWN0
b3J5Lmg6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2Fj
eUluZGV4LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5SW5kZXguaDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvTGVnYWN5T2JqZWN0U3RvcmUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmplY3RTdG9yZS5oOiBSZW1vdmVkLgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRCUmVxdWVzdC5o
OiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lSZXF1
ZXN0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVn
YWN5UmVxdWVzdC5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xlZ2Fj
eS9MZWdhY3lUcmFuc2FjdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVZlcnNpb25DaGFu
Z2VFdmVudC5oOiBSZW1vdmVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJDdXJzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJDdXJzb3I6OlNRTGl0ZUlEQkN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6
OlNRTGl0ZUlEQkN1cnNvcjo6ZXN0YWJsaXNoU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6U1FMaXRlSURCQ3Vyc29yOjppbnRlcm5hbEFkdmFuY2VPbmNlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmg6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5oOgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9J
REJCaW5kaW5nVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlSW5kZXhL
ZXlzRm9yVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0lEQkJpbmRpbmdV
dGlsaXRpZXMuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU01haW5UaHJlYWRFeGVjU3RhdGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNNYWluVGhyZWFkRXhlY1N0YXRlOjpkaWRMZWF2ZVNj
cmlwdENvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJbmRl
eGVkREJBZ2VudC5jcHA6CisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHA6CisgICAg
ICAgICogcGFnZS9EYXRhYmFzZVByb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlUHJvdmlkZXI6OmlkYkZhY3RvcnlCYWNrZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdl
L0RhdGFiYXNlUHJvdmlkZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGll
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhPjo6Y29weSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleE1ldGFkYXRhPjo6Y29weSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZU1ldGFkYXRhPjo6Y29weSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaDoKKwogMjAxNi0w
Mi0yNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJFR1JFU1NJT04gKHIxOTYyNjgpOiBNYW55IGFzc2VydGlvbiBmYWlsdXJlcyBhbmQgY3Jh
c2hlcyBvbiBTVkcgcGF0aCBhbmltYXRpb24gdGVzdHMgd2hlbiBKUyBnYXJiYWdlIGNvbGxlY3Rp
b24gaGFwcGVucyBxdWlja2x5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9ET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcAppbmRleCA1MGZhNDQw
Li5mNWJjNmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9E
T01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0RPTVdpbmRvd0luZGV4ZWREYXRhYmFzZS5jcHAKQEAgLTMyLDcgKzMyLDYgQEAK
ICNpbmNsdWRlICJEYXRhYmFzZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJJREJGYWN0b3J5SW1wbC5oIgotI2luY2x1ZGUgIkxlZ2FjeUZhY3RvcnkuaCIKICNp
bmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIApAQCAtMTEyLDEy
ICsxMTEsOCBAQCBJREJGYWN0b3J5KiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2U6OmluZGV4ZWRE
QigpCiAgICAgaWYgKCFtX3dpbmRvdy0+aXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgaWYgKCFtX2lkYkZhY3RvcnkpIHsKLSAgICAg
ICAgaWYgKHBhZ2UtPmRhdGFiYXNlUHJvdmlkZXIoKS5zdXBwb3J0c01vZGVybklEQigpKQotICAg
ICAgICAgICAgbV9pZGJGYWN0b3J5ID0gSURCQ2xpZW50OjpJREJGYWN0b3J5OjpjcmVhdGUocGFn
ZS0+aWRiQ29ubmVjdGlvbigpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9pZGJGYWN0
b3J5ID0gTGVnYWN5RmFjdG9yeTo6Y3JlYXRlKHBhZ2UtPmRhdGFiYXNlUHJvdmlkZXIoKS5pZGJG
YWN0b3J5QmFja2VuZCgpKTsKLSAgICB9CisgICAgaWYgKCFtX2lkYkZhY3RvcnkpCisgICAgICAg
IG1faWRiRmFjdG9yeSA9IElEQkNsaWVudDo6SURCRmFjdG9yeTo6Y3JlYXRlKHBhZ2UtPmlkYkNv
bm5lY3Rpb24oKSk7CiAKICAgICByZXR1cm4gbV9pZGJGYWN0b3J5LmdldCgpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFk
YXRhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MyYjVlMC4uMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRh
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgotCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSURCRGF0YWJh
c2VNZXRhZGF0YSBJREJEYXRhYmFzZU1ldGFkYXRhOjppc29sYXRlZENvcHkoKSBjb25zdAotewot
ICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgcmVzdWx0OwotICAgIHJlc3VsdC5pZCA9IGlkOwotICAg
IHJlc3VsdC52ZXJzaW9uID0gdmVyc2lvbjsKLSAgICByZXN1bHQubWF4T2JqZWN0U3RvcmVJZCA9
IG1heE9iamVjdFN0b3JlSWQ7Ci0KLSAgICByZXN1bHQubmFtZSA9IG5hbWUuaXNvbGF0ZWRDb3B5
KCk7Ci0KLSAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogb2JqZWN0U3RvcmVzKQotICAgICAg
ICByZXN1bHQub2JqZWN0U3RvcmVzLnNldChvYmplY3RTdG9yZS5rZXksIG9iamVjdFN0b3JlLnZh
bHVlLmlzb2xhdGVkQ29weSgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUlEQk9iamVj
dFN0b3JlTWV0YWRhdGEgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6aXNvbGF0ZWRDb3B5KCkgY29u
c3QKLXsKLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIHJlc3VsdDsKLSAgICByZXN1bHQuaWQg
PSBpZDsKLSAgICByZXN1bHQuYXV0b0luY3JlbWVudCA9IGF1dG9JbmNyZW1lbnQ7Ci0gICAgcmVz
dWx0Lm1heEluZGV4SWQgPSBtYXhJbmRleElkOwotCi0gICAgcmVzdWx0Lm5hbWUgPSBuYW1lLmlz
b2xhdGVkQ29weSgpOwotICAgIHJlc3VsdC5rZXlQYXRoID0ga2V5UGF0aC5pc29sYXRlZENvcHko
KTsKLQotICAgIGZvciAoYXV0byYgaW5kZXggOiBpbmRleGVzKQotICAgICAgICByZXN1bHQuaW5k
ZXhlcy5zZXQoaW5kZXgua2V5LCBpbmRleC52YWx1ZS5pc29sYXRlZENvcHkoKSk7Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1JREJJbmRleE1ldGFkYXRhIElEQkluZGV4TWV0YWRhdGE6Omlz
b2xhdGVkQ29weSgpIGNvbnN0Ci17Ci0gICAgSURCSW5kZXhNZXRhZGF0YSByZXN1bHQ7Ci0gICAg
cmVzdWx0LmlkID0gaWQ7Ci0gICAgcmVzdWx0LnVuaXF1ZSA9IHVuaXF1ZTsKLSAgICByZXN1bHQu
bXVsdGlFbnRyeSA9IG11bHRpRW50cnk7Ci0KLSAgICByZXN1bHQubmFtZSA9IG5hbWUuaXNvbGF0
ZWRDb3B5KCk7Ci0gICAgcmVzdWx0LmtleVBhdGggPSBrZXlQYXRoLmlzb2xhdGVkQ29weSgpOwot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZU1ldGFkYXRhLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGZhNDNkNjIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VNZXRhZGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09P
R0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIElEQkRhdGFiYXNlTWV0YWRhdGFfaAotI2RlZmluZSBJREJEYXRhYmFzZU1l
dGFkYXRhX2gKLQotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlTWV0YWRhdGEuaCIKLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBJ
REJEYXRhYmFzZU1ldGFkYXRhIHsKLQotICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgb25seSBoZXJl
IHRvIHN1cHBvcnQgdGhlIExldmVsREIgYmFja2VuZCB3aGljaCBpbmNvcnJlY3RseSBoYW5kbGVz
IHZlcnNpb25pbmcuCi0gICAgLy8gT25jZSBMZXZlbERCIHN1cHBvcnRzIGEgc2luZ2xlLCB1aW50
NjRfdCB2ZXJzaW9uIGFuZCB0aHJvd3Mgb3V0IHRoZSBvbGQgc3RyaW5nIHZlcnNpb24sIHRoZXNl
Ci0gICAgLy8gc2hvdWxkIGJlIGdvdHRlbiByaWQgb2YuCi0gICAgLy8gQWxzbywgIk5vSW50VmVy
c2lvbiIgdXNlZCB0byBiZSBhIG1hZ2ljIG51bWJlciBvZiAtMSwgd2hpY2ggZG9lc24ndCB3b3Jr
IHdpdGggdGhlIG5ldyB1bnNpZ25lZCB0eXBlLgotICAgIC8vIENoYW5naW5nIHRoZSB2YWx1ZSB0
byBJTlQ2NF9NQVggaGVyZSBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSB0ZW1wb3JhcnkgZml4IGFz
IHRoZSBjdXJyZW50IExldmVsREIKLSAgICAvLyBhbHJlYWR5IGNhbm5vdCByZXByZXNlbnQgdmFs
aWQgdmVyc2lvbiBudW1iZXJzIGJldHdlZW4gSU5UNjRfTUFYIGFuZCBVSU5UNjRfTUFYLgotCi0j
aWZuZGVmIElOVDY0X01BWAotI2RlZmluZSBJTlQ2NF9NQVggOTIyMzM3MjAzNjg1NDc3NTgwN0xM
Ci0jZW5kaWYKLQotICAgIGVudW0gewotICAgICAgICBOb0ludFZlcnNpb24gPSBJTlQ2NF9NQVgs
Ci0gICAgICAgIERlZmF1bHRJbnRWZXJzaW9uID0gMAotICAgIH07Ci0KLSAgICBJREJEYXRhYmFz
ZU1ldGFkYXRhKCkKLSAgICAgICAgOiBpZCgwKQotICAgICAgICAsIHZlcnNpb24oMCkKLSAgICAg
ICAgLCBtYXhPYmplY3RTdG9yZUlkKDApCi0gICAgewotICAgIH0KLQotICAgIElEQkRhdGFiYXNl
TWV0YWRhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQ2NF90IGlkLCB1aW50NjRfdCB2ZXJzaW9u
LCBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQpCi0gICAgICAgIDogbmFtZShuYW1lKQotICAgICAg
ICAsIGlkKGlkKQotICAgICAgICAsIHZlcnNpb24odmVyc2lvbikKLSAgICAgICAgLCBtYXhPYmpl
Y3RTdG9yZUlkKG1heE9iamVjdFN0b3JlSWQpCi0gICAgewotICAgIH0KLQotICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYsIElEQkRhdGFiYXNl
TWV0YWRhdGEmKTsKLQotICAgIFN0cmluZyBuYW1lOwotICAgIGludDY0X3QgaWQ7Ci0gICAgdWlu
dDY0X3QgdmVyc2lvbjsKLSAgICBpbnQ2NF90IG1heE9iamVjdFN0b3JlSWQ7Ci0KLSAgICB0eXBl
ZGVmIEhhc2hNYXA8aW50NjRfdCwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YT4gT2JqZWN0U3RvcmVN
YXA7Ci0gICAgT2JqZWN0U3RvcmVNYXAgb2JqZWN0U3RvcmVzOwotCi0gICAgV0VCQ09SRV9FWFBP
UlQgSURCRGF0YWJhc2VNZXRhZGF0YSBpc29sYXRlZENvcHkoKSBjb25zdDsKLX07Ci0KLXRlbXBs
YXRlPGNsYXNzIEVuY29kZXI+Ci12b2lkIElEQkRhdGFiYXNlTWV0YWRhdGE6OmVuY29kZShFbmNv
ZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbmFtZSA8PCBpZCA8PCB2ZXJz
aW9uIDw8IG1heE9iamVjdFN0b3JlSWQgPDwgb2JqZWN0U3RvcmVzOwotfQotCi10ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgotYm9vbCBJREJEYXRhYmFzZU1ldGFkYXRhOjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlciwgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEpCi17Ci0gICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShtZXRhZGF0YS5uYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKCFkZWNvZGVyLmRlY29kZShtZXRhZGF0YS5pZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YWRhdGEudmVyc2lvbikpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YWRhdGEubWF4T2JqZWN0
U3RvcmVJZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUobWV0YWRhdGEub2JqZWN0U3RvcmVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQkRhdGFiYXNlTWV0YWRhdGFfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRmFjdG9yeS5oCmluZGV4IDNh
ZmM0ZWUuLjk5ZDI4ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJGYWN0b3J5LmgKQEAgLTM4LDcgKzM4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBJREJLZXk7CiBjbGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogc3RydWN0IEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZTsKQEAgLTY4LDQgKzY3LDQgQEAgcHJvdGVjdGVkOgogCiAjZW5kaWYK
IAotI2VuZGlmIC8vIExlZ2FjeUZhY3RvcnlfaAorI2VuZGlmIC8vIElEQkZhY3RvcnlfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmgKaW5kZXggZjI1M2RjMS4u
NTI1YTE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
SW5kZXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5o
CkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJJREJDdXJzb3IuaCIKICNpbmNsdWRlICJJ
REJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlTWV0YWRhdGEuaCIKICNpbmNsdWRl
ICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJP
YmplY3RTdG9yZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCSW5kZXhNZXRhZGF0YS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXhNZXRhZGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjIxMmE0
Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4
TWV0YWRhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkluZGV4TWV0YWRh
dGFfaAotI2RlZmluZSBJREJJbmRleE1ldGFkYXRhX2gKLQotI2luY2x1ZGUgIklEQktleVBhdGgu
aCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RydWN0IElEQkluZGV4TWV0YWRhdGEgewotICAgIElEQkluZGV4TWV0YWRhdGEoKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBJREJJbmRleE1ldGFkYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwg
aW50NjRfdCBpZCwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wg
bXVsdGlFbnRyeSkKLSAgICAgICAgOiBuYW1lKG5hbWUpCi0gICAgICAgICwgaWQoaWQpCi0gICAg
ICAgICwga2V5UGF0aChrZXlQYXRoKQotICAgICAgICAsIHVuaXF1ZSh1bmlxdWUpCi0gICAgICAg
ICwgbXVsdGlFbnRyeShtdWx0aUVudHJ5KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdGVtcGxh
dGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OwotICAgIHRlbXBs
YXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwgSURCSW5kZXhN
ZXRhZGF0YSYpOwotCi0gICAgU3RyaW5nIG5hbWU7Ci0gICAgaW50NjRfdCBpZDsKLSAgICBJREJL
ZXlQYXRoIGtleVBhdGg7Ci0gICAgYm9vbCB1bmlxdWU7Ci0gICAgYm9vbCBtdWx0aUVudHJ5Owot
Ci0gICAgSURCSW5kZXhNZXRhZGF0YSBpc29sYXRlZENvcHkoKSBjb25zdDsKLQotICAgIHN0YXRp
YyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IC0xOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgRW5j
b2Rlcj4KLXZvaWQgSURCSW5kZXhNZXRhZGF0YTo6ZW5jb2RlKEVuY29kZXImIGVuY29kZXIpIGNv
bnN0Ci17Ci0gICAgZW5jb2RlciA8PCBuYW1lIDw8IGlkIDw8IGtleVBhdGggPDwgdW5pcXVlIDw8
IG11bHRpRW50cnk7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29kZXI+Ci1ib29sIElEQkluZGV4
TWV0YWRhdGE6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyLCBJREJJbmRleE1ldGFkYXRhJiBtZXRh
ZGF0YSkKLXsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFkYXRhLm5hbWUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKG1ldGFkYXRhLmlkKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhZGF0
YS5rZXlQYXRoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFkZWNvZGVyLmRl
Y29kZShtZXRhZGF0YS51bmlxdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKG1ldGFkYXRhLm11bHRpRW50cnkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCSW5kZXhNZXRh
ZGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZU1ldGFkYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZU1ldGFkYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2
YjQ3ZjEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVNZXRhZGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElE
Qk9iamVjdFN0b3JlTWV0YWRhdGFfaAotI2RlZmluZSBJREJPYmplY3RTdG9yZU1ldGFkYXRhX2gK
LQotI2luY2x1ZGUgIklEQkluZGV4TWV0YWRhdGEuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIHsKLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhKCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGludDY0X3QgaWQs
IGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCBt
YXhJbmRleElkKQotICAgICAgICA6IG5hbWUobmFtZSkKLSAgICAgICAgLCBpZChpZCkKLSAgICAg
ICAgLCBrZXlQYXRoKGtleVBhdGgpCi0gICAgICAgICwgYXV0b0luY3JlbWVudChhdXRvSW5jcmVt
ZW50KQotICAgICAgICAsIG1heEluZGV4SWQobWF4SW5kZXhJZCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0Owot
ICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IHN0YXRpYyBib29sIGRlY29kZShEZWNvZGVyJiwg
SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOwotICAgIAotICAgIFN0cmluZyBuYW1lOwotICAgIGlu
dDY0X3QgaWQ7Ci0gICAgSURCS2V5UGF0aCBrZXlQYXRoOwotICAgIGJvb2wgYXV0b0luY3JlbWVu
dDsKLSAgICBpbnQ2NF90IG1heEluZGV4SWQ7Ci0KLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBJ
bnZhbGlkSWQgPSAtMTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBJREJJbmRleE1l
dGFkYXRhPiBJbmRleE1hcDsKLSAgICBJbmRleE1hcCBpbmRleGVzOwotCi0gICAgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSBpc29sYXRlZENvcHkoKSBjb25zdDsKLX07Ci0KLXRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+Ci12b2lkIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OmVuY29kZShFbmNvZGVyJiBl
bmNvZGVyKSBjb25zdAotewotICAgIGVuY29kZXIgPDwgbmFtZSA8PCBpZCA8PCBrZXlQYXRoIDw8
IGF1dG9JbmNyZW1lbnQgPDwgbWF4SW5kZXhJZCA8PCBpbmRleGVzOwotfQotCi10ZW1wbGF0ZTxj
bGFzcyBEZWNvZGVyPgotYm9vbCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgbWV0YWRhdGEpCi17Ci0gICAgaWYg
KCFkZWNvZGVyLmRlY29kZShtZXRhZGF0YS5uYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShtZXRhZGF0YS5pZCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YWRhdGEua2V5UGF0aCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5kZWNvZGUobWV0YWRhdGEuYXV0
b0luY3JlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUobWV0YWRhdGEubWF4SW5kZXhJZCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghZGVjb2Rlci5kZWNvZGUobWV0YWRhdGEuaW5kZXhlcykpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBJREJPYmplY3RT
dG9yZU1ldGFkYXRhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9wZXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T3BlcmF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4OGQyY2UuLjAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT3BlcmF0aW9uLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJP
cGVyYXRpb25faAotI2RlZmluZSBJREJPcGVyYXRpb25faAotCi0jaW5jbHVkZSA8ZnVuY3Rpb25h
bD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIElEQk9wZXJhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPElEQk9wZXJhdGlvbj4g
ewotcHVibGljOgotICAgIHZpcnR1YWwgfklEQk9wZXJhdGlvbigpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spID0g
MDsKLX07Ci0KLWNsYXNzIElEQlN5bmNocm9ub3VzT3BlcmF0aW9uIDogcHVibGljIFJlZkNvdW50
ZWQ8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5JREJT
eW5jaHJvbm91c09wZXJhdGlvbigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgPSAw
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0jZW5kaWYgLy8gSURCT3BlcmF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rpb24uaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M3NjRmOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25uZWN0aW9uLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJTZXJ2ZXJDb25uZWN0
aW9uX2gKLSNkZWZpbmUgSURCU2VydmVyQ29ubmVjdGlvbl9oCi0KLSNpbmNsdWRlICJJREJDdXJz
b3JCYWNrZW5kT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlTWV0YWRhdGEuaCIK
LSNpbmNsdWRlICJJREJHZXRSZXN1bHQuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tl
bmRPcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiSW5kZXhlZERCLmgiCi0jaW5jbHVkZSA8ZnVuY3Rp
b25hbD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJEYXRhYmFzZUVy
cm9yOwotY2xhc3MgSURCS2V5OwotY2xhc3MgSURCVHJhbnNhY3Rpb25CYWNrZW5kOwotCi1zdHJ1
Y3QgSURCT3BlbkN1cnNvclJlc3VsdDsKLXN0cnVjdCBJREJJbmRleE1ldGFkYXRhOwotc3RydWN0
IElEQk9iamVjdFN0b3JlTWV0YWRhdGE7Ci0KLS8vIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEg
c2luZ2xlIGFzeW5jaHJvbm91cyBsYXllciBiZXR3ZWVuIHRoZSB3ZWItZmFjaW5nIGZyb250ZW5k
Ci0vLyBhbmQgdGhlIEkvTyBwZXJmb3JtaW5nIGJhY2tlbmQgb2YgSW5kZXhlZERhdGFiYXNlLgot
Ly8gSWYgYW4gb3BlcmF0aW9uJ3MgY29tcGxldGlvbiBuZWVkcyB0byBiZSBjb25maXJtZWQgdGhh
dCBtdXN0IGJlIGRvbmUgdGhyb3VnaCB1c2Ugb2YgYSBjYWxsYmFjayBmdW5jdGlvbi4KLWNsYXNz
IElEQlNlcnZlckNvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2ZXJDb25uZWN0
aW9uPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCU2VydmVyQ29ubmVjdGlvbigpIHsgfQot
Ci0gICAgdmlydHVhbCBib29sIGlzQ2xvc2VkKCkgPSAwOwotCi0gICAgdHlwZWRlZiBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKGJvb2wgc3VjY2Vzcyk+IEJvb2xDYWxsYmFja0Z1bmN0aW9uOwotCi0gICAg
Ly8gRGF0YWJhc2UtbGV2ZWwgb3BlcmF0aW9ucwotICAgIHR5cGVkZWYgc3RkOjpmdW5jdGlvbjx2
b2lkIChjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiwgYm9vbCBzdWNjZXNzKT4gR2V0SURCRGF0
YWJhc2VNZXRhZGF0YUZ1bmN0aW9uOwotICAgIHZpcnR1YWwgdm9pZCBnZXRPckVzdGFibGlzaElE
QkRhdGFiYXNlTWV0YWRhdGEoR2V0SURCRGF0YWJhc2VNZXRhZGF0YUZ1bmN0aW9uKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRh
YmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxs
YmFjaykgPSAwOwotCi0gICAgLy8gVHJhbnNhY3Rpb24tbGV2ZWwgb3BlcmF0aW9ucwotICAgIHZp
cnR1YWwgdm9pZCBvcGVuVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBjb25zdCBI
YXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGUsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjaykgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBiZWdpblRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgc3RkOjpmdW5j
dGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBj
b21taXRUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIEJvb2xDYWxsYmFja0Z1bmN0
aW9uIHN1Y2Nlc3NDYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXNldFRyYW5zYWN0
aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRp
b25DYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgYm9vbCByZXNldFRyYW5zYWN0aW9uU3luYyhp
bnQ2NF90IHRyYW5zYWN0aW9uSUQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2tUcmFu
c2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21w
bGV0aW9uQ2FsbGJhY2spID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcm9sbGJhY2tUcmFuc2FjdGlv
blN5bmMoaW50NjRfdCB0cmFuc2FjdGlvbklEKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgaW50NjRfdCBkYXRhYmFzZUlELCBpbnQ2
NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBJREJLZXkm
IHByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90LCAxPiYgaW5kZXhJRHMsIGNvbnN0IFZl
Y3RvcjxWZWN0b3I8UmVmUHRyPElEQktleT4+LCAxPiYgaW5kZXhLZXlzLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykg
PSAwOwotCi0gICAgdmlydHVhbCB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKElEQlRyYW5zYWN0aW9u
QmFja2VuZCYsIGNvbnN0IENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlv
bjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2sp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW5kZXgoSURCVHJhbnNhY3Rpb25CYWNrZW5k
JiwgY29uc3QgQ3JlYXRlSW5kZXhPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVJbmRleChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBEZWxl
dGVJbmRleE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGdl
dChJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBHZXRPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoY29uc3QgSURCR2V0UmVzdWx0JiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9y
Pik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBwdXQoSURCVHJh
bnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgUHV0T3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lk
KFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBs
ZXRpb25DYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKElEQlRyYW5z
YWN0aW9uQmFja2VuZCYsIGNvbnN0IE9wZW5DdXJzb3JPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoaW50NjRfdCwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4sIFBh
c3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNv
bXBsZXRpb25DYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb3VudChJREJUcmFuc2Fj
dGlvbkJhY2tlbmQmLCBjb25zdCBDb3VudE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZChp
bnQ2NF90LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNr
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZVJhbmdlKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCYsIGNvbnN0IERlbGV0ZVJhbmdlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25z
dCBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3Qg
RGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBjaGFuZ2VEYXRhYmFzZVZlcnNpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29u
c3QgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uJiwgc3RkOjpmdW5j
dGlvbjx2b2lkKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJh
Y2spID0gMDsKLQotICAgIC8vIEN1cnNvci1sZXZlbCBvcGVyYXRpb25zCi0gICAgdmlydHVhbCB2
b2lkIGN1cnNvckFkdmFuY2UoSURCQ3Vyc29yQmFja2VuZCYsIGNvbnN0IEN1cnNvckFkdmFuY2VP
cGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVm
UHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBj
dXJzb3JJdGVyYXRlKElEQkN1cnNvckJhY2tlbmQmLCBjb25zdCBDdXJzb3JJdGVyYXRpb25PcGVy
YXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRy
PElEQktleT4sIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgPSAwOwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jZW5kaWYgLy8g
SURCU2VydmVyQ29ubmVjdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb24uaAppbmRleCA1ZjE1NmFmLi45ZTlhMGU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKQEAgLTQw
LDEzICs0MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBET01FcnJvcjsKIGNsYXNz
IElEQkN1cnNvcjsKIGNsYXNzIElEQkRhdGFiYXNlOwotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5k
OwogY2xhc3MgSURCRGF0YWJhc2VFcnJvcjsKIGNsYXNzIElEQk9iamVjdFN0b3JlOwogY2xhc3Mg
SURCT3BlbkRCUmVxdWVzdDsKIAogc3RydWN0IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZTsKLXN0
cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOwogCiBjbGFzcyBJREJUcmFuc2FjdGlvbiA6IHB1
YmxpYyBSZWZDb3VudGVkPElEQlRyYW5zYWN0aW9uPiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElu
bGluZURhdGEsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyR2xvYmFsU2NvcGVJbmRleGVk
RGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyR2xv
YmFsU2NvcGVJbmRleGVkRGF0YWJhc2UuY3BwCmluZGV4IDMwYjgxNjkuLmEyYWIwMjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckdsb2JhbFNjb3Bl
SW5kZXhlZERhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9Xb3JrZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5jcHAKQEAgLTMyLDcgKzMyLDYgQEAK
ICNpbmNsdWRlICJXb3JrZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5oIgogCiAjaW5jbHVk
ZSAiSURCRmFjdG9yeS5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlNlY3VyaXR5
T3JpZ2luLmgiCiAKQEAgLTY5LDExICs2OCw3IEBAIElEQkZhY3RvcnkqIFdvcmtlckdsb2JhbFNj
b3BlSW5kZXhlZERhdGFiYXNlOjppbmRleGVkREIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCoKIAog
SURCRmFjdG9yeSogV29ya2VyR2xvYmFsU2NvcGVJbmRleGVkRGF0YWJhc2U6OmluZGV4ZWREQigp
CiB7Ci0gICAgaWYgKCFtX2ZhY3RvcnlCYWNrZW5kKQotICAgICAgICBtX2ZhY3RvcnlCYWNrZW5k
ID0gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OmNyZWF0ZSgpOwotICAgIGlmICghbV9pZGJG
YWN0b3J5KQotICAgICAgICBtX2lkYkZhY3RvcnkgPSBJREJGYWN0b3J5OjpjcmVhdGUobV9mYWN0
b3J5QmFja2VuZC5nZXQoKSk7Ci0gICAgcmV0dXJuIG1faWRiRmFjdG9yeS5nZXQoKTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyR2xvYmFsU2NvcGVJbmRleGVk
RGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL1dvcmtlckdsb2Jh
bFNjb3BlSW5kZXhlZERhdGFiYXNlLmgKaW5kZXggOGIwZGNlNi4uOTU2Y2I2NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvV29ya2VyR2xvYmFsU2NvcGVJbmRl
eGVkRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9Xb3Jr
ZXJHbG9iYWxTY29wZUluZGV4ZWREYXRhYmFzZS5oCkBAIC0zNSw3ICszNSw2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkZhY3Rvcnk7Ci1jbGFzcyBJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZTsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKIGNsYXNzIFdvcmtl
ckdsb2JhbFNjb3BlSW5kZXhlZERhdGFiYXNlIDogcHVibGljIFN1cHBsZW1lbnQ8U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dD4gewpAQCAtNTAsNyArNDksNiBAQCBwcml2YXRlOgogICAgIElEQkZhY3Rv
cnkqIGluZGV4ZWREQigpOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBzdXBwbGVtZW50TmFtZSgp
OwogCi0gICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2ZhY3RvcnlCYWNr
ZW5kOwogICAgIFJlZlB0cjxJREJGYWN0b3J5PiBtX2lkYkZhY3Rvcnk7CiB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCQ2FsbGJhY2tz
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCQ2FsbGJhY2tz
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NTcyZjEuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkNhbGxiYWNrcy5oCisr
KyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJDYWxsYmFja3NfaAotI2RlZmluZSBJREJD
YWxsYmFja3NfaAotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5oIgotI2luY2x1ZGUgIklE
QktleS5oIgotI2luY2x1ZGUgIklEQktleVBhdGguaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLWNsYXNzIERPTVN0cmluZ0xpc3Q7Ci1jbGFzcyBJREJDdXJzb3JCYWNrZW5kOwotY2xhc3Mg
SURCRGF0YWJhc2VCYWNrZW5kOwotY2xhc3MgU2hhcmVkQnVmZmVyOwotCi1zdHJ1Y3QgSURCRGF0
YWJhc2VNZXRhZGF0YTsKLQotY2xhc3MgSURCQ2FsbGJhY2tzIDogcHVibGljIFJlZkNvdW50ZWQ8
SURCQ2FsbGJhY2tzPiB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+SURCQ2FsbGJhY2tzKCkgeyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb25FcnJvcihQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
KSA9IDA7Ci0gICAgLy8gRnJvbSBJREJGYWN0b3J5LndlYmtpdEdldERhdGFiYXNlTmFtZXMoKQot
ICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PikgPSAw
OwotICAgIC8vIEZyb20gSURCT2JqZWN0U3RvcmUvSURCSW5kZXgub3BlbkN1cnNvcigpLCBJREJJ
bmRleC5vcGVuS2V5Q3Vyc29yKCkKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQ
dHI8SURCQ3Vyc29yQmFja2VuZD4pID0gMDsKLSAgICAvLyBGcm9tIElEQk9iamVjdFN0b3JlLmFk
ZCgpL3B1dCgpLCBJREJJbmRleC5nZXRLZXkoKQotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxJREJLZXk+KSA9IDA7Ci0gICAgLy8gRnJvbSBJREJPYmplY3RTdG9yZS9JREJJ
bmRleC5nZXQoKS9jb3VudCgpLCBhbmQgdmFyaW91cyBtZXRob2RzIHRoYXQgeWllbGQgbnVsbC91
bmRlZmluZWQuCi0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4pID0gMDsKLSAgICAvLyBGcm9tIElEQk9iamVjdFN0b3JlL0lEQkluZGV4LmdldCgpICh3
aXRoIGtleSBpbmplY3Rpb24pCi0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4sIFBhc3NSZWZQdHI8SURCS2V5PiwgY29uc3QgSURCS2V5UGF0aCYpID0g
MDsKLSAgICAvLyBGcm9tIElEQk9iamVjdFN0b3JlL0lEQkluZGV4LmNvdW50KCkKLSAgICB2aXJ0
dWFsIHZvaWQgb25TdWNjZXNzKGludDY0X3QgdmFsdWUpID0gMDsKLQotICAgIC8vIEZyb20gSURC
RmFjdG9yLmRlbGV0ZURhdGFiYXNlKCksIElEQk9iamVjdFN0b3JlL0lEQkluZGV4LmdldCgpLCBJ
REJPYmplY3RTdG9yZS5kZWxldGUoKSwgSURCT2JqZWN0U3RvcmUuY2xlYXIoKQotICAgIHZpcnR1
YWwgdm9pZCBvblN1Y2Nlc3MoKSA9IDA7Ci0KLSAgICAvLyBGcm9tIElEQkN1cnNvci5hZHZhbmNl
KCkvY29udGludWUoKQotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJL
ZXk+LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZm
ZXI+KSA9IDA7Ci0KLSAgICAvLyBGcm9tIElEQkZhY3Rvcnkub3BlbigpL2RlbGV0ZURhdGFiYXNl
KCkKLSAgICB2aXJ0dWFsIHZvaWQgb25CbG9ja2VkKHVpbnQ2NF90IC8qIGV4aXN0aW5nVmVyc2lv
biAqLykgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIC8vIEZyb20gSURCRmFjdG9yeS5v
cGVuKCkKLSAgICB2aXJ0dWFsIHZvaWQgb25VcGdyYWRlTmVlZGVkKHVpbnQ2NF90IC8qIG9sZFZl
cnNpb24gKi8sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiwgY29uc3QgSURCRGF0YWJh
c2VNZXRhZGF0YSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQg
b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiwgY29uc3QgSURCRGF0YWJh
c2VNZXRhZGF0YSYpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBJREJDYWxsYmFja3NfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1
cnNvckJhY2tlbmQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODAxYzdlLi4w
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJD
dXJzb3JCYWNrZW5kLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKLQotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0j
aW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJJREJEYXRh
YmFzZUJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgotI2luY2x1
ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5o
IgotI2luY2x1ZGUgIklEQktleVJhbmdlLmgiCi0jaW5jbHVkZSAiSURCT3BlcmF0aW9uLmgiCi0j
aW5jbHVkZSAiSURCU2VydmVyQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JREJDdXJz
b3JCYWNrZW5kOjpJREJDdXJzb3JCYWNrZW5kKGludDY0X3QgY3Vyc29ySUQsIEluZGV4ZWREQjo6
Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHRhc2tU
eXBlLCBJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0
b3JlSUQpCi0gICAgOiBtX3Rhc2tUeXBlKHRhc2tUeXBlKQotICAgICwgbV9jdXJzb3JUeXBlKGN1
cnNvclR5cGUpCi0gICAgLCBtX3RyYW5zYWN0aW9uKCZ0cmFuc2FjdGlvbikKLSAgICAsIG1fb2Jq
ZWN0U3RvcmVJRChvYmplY3RTdG9yZUlEKQotICAgICwgbV9jdXJzb3JJRChjdXJzb3JJRCkKLSAg
ICAsIG1fc2F2ZWRDdXJzb3JJRCgwKQotICAgICwgbV9jbG9zZWQoZmFsc2UpCi17Ci0gICAgbV90
cmFuc2FjdGlvbi0+cmVnaXN0ZXJPcGVuQ3Vyc29yKHRoaXMpOwotfQotCi1JREJDdXJzb3JCYWNr
ZW5kOjp+SURCQ3Vyc29yQmFja2VuZCgpCi17Ci0gICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3Rl
ck9wZW5DdXJzb3IodGhpcyk7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2VuZDo6Y29udGludWVG
dW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklE
QkN1cnNvckJhY2tlbmQ6OmNvbnRpbnVlIik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayht
X3Rhc2tUeXBlLCBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBrZXksIGNh
bGxiYWNrcykpOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmQ6OmFkdmFuY2UodW5zaWduZWQg
bG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgRXhjZXB0
aW9uQ29kZSYpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJDdXJzb3JCYWNrZW5kOjphZHZh
bmNlIik7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tz
OwotICAgIG1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhDdXJzb3JBZHZhbmNlT3BlcmF0aW9u
OjpjcmVhdGUodGhpcywgY291bnQsIGNhbGxiYWNrcykpOwotfQotCi12b2lkIElEQkN1cnNvckJh
Y2tlbmQ6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCQ3Vyc29yQmFj
a2VuZDo6ZGVsZXRlIik7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6UmVhZE9ubHkpOwotICAgIFJlZlB0cjxJREJLZXlSYW5n
ZT4ga2V5UmFuZ2UgPSBJREJLZXlSYW5nZTo6Y3JlYXRlKHByaW1hcnlLZXkoKSk7Ci0gICAgbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5kZWxldGVSYW5nZShtX3RyYW5zYWN0aW9uLT5pZCgpLCBt
X29iamVjdFN0b3JlSUQsIGtleVJhbmdlLnJlbGVhc2UoKSwgcHJwQ2FsbGJhY2tzKTsKLX0KLQot
dm9pZCBJREJDdXJzb3JCYWNrZW5kOjpjbG9zZSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJ
REJDdXJzb3JCYWNrZW5kOjpjbG9zZSIpOwotICAgIGNsZWFyKCk7Ci0gICAgbV9jbG9zZWQgPSB0
cnVlOwotICAgIG1fc2F2ZWRDdXJzb3JJRCA9IDA7Ci19Ci0KLXZvaWQgSURCQ3Vyc29yQmFja2Vu
ZDo6dXBkYXRlQ3Vyc29yRGF0YShJREJLZXkqIGtleSwgSURCS2V5KiBwcmltYXJ5S2V5LCBTaGFy
ZWRCdWZmZXIqIHZhbHVlQnVmZmVyKQotewotICAgIG1fY3VycmVudEtleSA9IGtleTsKLSAgICBt
X2N1cnJlbnRQcmltYXJ5S2V5ID0gcHJpbWFyeUtleTsKLSAgICBtX2N1cnJlbnRWYWx1ZUJ1ZmZl
ciA9IHZhbHVlQnVmZmVyOwotfQotCi12b2lkIElEQkN1cnNvckJhY2tlbmQ6OmNsZWFyKCkKLXsK
LSAgICBtX2N1cnNvcklEID0gMDsKLSAgICBtX2N1cnJlbnRLZXkgPSBudWxscHRyOwotICAgIG1f
Y3VycmVudFByaW1hcnlLZXkgPSBudWxscHRyOwotICAgIG1fY3VycmVudFZhbHVlQnVmZmVyID0g
bnVsbHB0cjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZWdhY3kvSURCQ3Vyc29yQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0lEQkN1cnNvckJhY2tlbmQuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDI0ZDFmOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvSURCQ3Vyc29yQmFja2VuZC5oCisrKyAvZGV2L251bGwKQEAgLTEs
OTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLQotI2lmbmRlZiBJREJDdXJzb3JCYWNrZW5kX2gKLSNkZWZpbmUg
SURCQ3Vyc29yQmFja2VuZF9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZC5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQmFj
a2VuZC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQotY2xhc3MgSURCQ3Vy
c29yQmFja2VuZCA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkN1cnNvckJhY2tlbmQ+IHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZShpbnQ2NF90IGN1cnNv
cklELCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yQmFja2VuZChjdXJzb3JJRCwgY3Vyc29yVHlw
ZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrLCB0cmFuc2FjdGlvbiwgb2JqZWN0U3Rv
cmVJRCkpOwotICAgIH0KLSAgICBzdGF0aWMgUmVmPElEQkN1cnNvckJhY2tlbmQ+IGNyZWF0ZShp
bnQ2NF90IGN1cnNvcklELCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0
YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0
cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSURCQ3Vyc29yQmFja2VuZChjdXJzb3JJRCwgY3Vyc29yVHlwZSwgdGFz
a1R5cGUsIHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlEKSk7Ci0gICAgfQotICAgIH5JREJDdXJz
b3JCYWNrZW5kKCk7Ci0KLSAgICB2b2lkIGFkdmFuY2UodW5zaWduZWQgbG9uZywgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBjb250aW51ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNr
KCkgeyB9Ci0KLSAgICBJREJLZXkqIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEtleS5n
ZXQoKTsgfQotICAgIElEQktleSogcHJpbWFyeUtleSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVu
dFByaW1hcnlLZXkuZ2V0KCk7IH0KLSAgICBTaGFyZWRCdWZmZXIqIHZhbHVlQnVmZmVyKCkgY29u
c3QgeyByZXR1cm4gKG1fY3Vyc29yVHlwZSA9PSBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9u
bHkpID8gbnVsbHB0ciA6IG1fY3VycmVudFZhbHVlQnVmZmVyLmdldCgpOyB9Ci0gICAgdm9pZCB1
cGRhdGVDdXJzb3JEYXRhKElEQktleSosIElEQktleSogcHJpbWFyeUtleSwgU2hhcmVkQnVmZmVy
KiB2YWx1ZUJ1ZmZlcik7Ci0KLSAgICB2b2lkIGNsb3NlKCk7Ci0KLSAgICBJbmRleGVkREI6OkN1
cnNvclR5cGUgY3Vyc29yVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yVHlwZTsgfQotCi0g
ICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29ySUQ7IH0KLQotICAgIElEQlRy
YW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24oKSB7IHJldHVybiAqbV90cmFuc2FjdGlvbjsg
fQotCi0gICAgdm9pZCBjbGVhcigpOwotICAgIHZvaWQgc2V0U2F2ZWRDdXJzb3JJRChpbnQ2NF90
IGN1cnNvcklEKSB7IG1fc2F2ZWRDdXJzb3JJRCA9IGN1cnNvcklEOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgSURCQ3Vyc29yQmFja2VuZChpbnQ2NF90IGN1cnNvcklELCBJbmRleGVkREI6OkN1cnNvclR5
cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZCYs
IGludDY0X3Qgb2JqZWN0U3RvcmVJRCk7Ci0KLSAgICBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tU
eXBlIG1fdGFza1R5cGU7Ci0gICAgSW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsK
LSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNv
bnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwotCi0gICAgaW50NjRfdCBtX2N1cnNvcklEOwot
ICAgIGludDY0X3QgbV9zYXZlZEN1cnNvcklEOwotCi0gICAgUmVmUHRyPElEQktleT4gbV9jdXJy
ZW50S2V5OwotICAgIFJlZlB0cjxJREJLZXk+IG1fY3VycmVudFByaW1hcnlLZXk7Ci0gICAgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gbV9jdXJyZW50VmFsdWVCdWZmZXI7Ci0KLSAgICBib29sIG1fY2xv
c2VkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBJREJDdXJzb3JCYWNrZW5kX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNr
ZW5kT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1ZjhhNWZlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw4OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJ
REJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0KLSNpbmNsdWRlICJJREJTZXJ2ZXJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2lu
Zy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQ3Vyc29yQWR2YW5jZU9wZXJhdGlv
bjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewot
ICAgIExPRyhTdG9yYWdlQVBJLCAiQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbiIpOwotCi0gICAgUmVm
UHRyPEN1cnNvckFkdmFuY2VPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKLSAgICBhdXRvIGNh
bGxiYWNrID0gW3RoaXMsIG9wZXJhdGlvbiwgY29tcGxldGlvbkNhbGxiYWNrXShQYXNzUmVmUHRy
PElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSwgUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IHZhbHVlQnVmZmVyLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVy
cm9yKSB7Ci0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgbV9jdXJzb3ItPmNsZWFy
KCk7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoIWtleSkgewotICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBubyBlcnJvciBidXQg
YWxzbyBubyBrZXksIHRoZW4gdGhlIGN1cnNvciByZWFjaGVkIHRoZSBlbmQuCi0gICAgICAgICAg
ICBtX2N1cnNvci0+Y2xlYXIoKTsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
c3RhdGljX2Nhc3Q8U2hhcmVkQnVmZmVyKj4obnVsbHB0cikpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgbV9jdXJzb3ItPnVwZGF0ZUN1cnNvckRhdGEoa2V5LmdldCgpLCBwcmltYXJ5
S2V5LmdldCgpLCB2YWx1ZUJ1ZmZlci5nZXQoKSk7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+
b25TdWNjZXNzKGtleSwgcHJpbWFyeUtleSwgdmFsdWVCdWZmZXIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gRklYTUU6IEN1cnNvciBvcGVyYXRpb25zIHNob3VsZCBiZSBhYmxlIHRvIHBhc3Mg
YWxvbmcgYW4gZXJyb3IgaW5zdGVhZCBvZiBzdWNjZXNzCi0gICAgICAgIGNvbXBsZXRpb25DYWxs
YmFjaygpOwotICAgIH07Ci0KLSAgICBtX2N1cnNvci0+dHJhbnNhY3Rpb24oKS5kYXRhYmFzZSgp
LnNlcnZlckNvbm5lY3Rpb24oKS5jdXJzb3JBZHZhbmNlKCptX2N1cnNvciwgKnRoaXMsIGNhbGxi
YWNrKTsKLX0KLQotdm9pZCBDdXJzb3JJdGVyYXRpb25PcGVyYXRpb246OnBlcmZvcm0oc3RkOjpm
dW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIkN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbiIpOwotCi0gICAgUmVmUHRyPEN1cnNvckl0ZXJh
dGlvbk9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOwotICAgIGF1dG8gY2FsbGJhY2sgPSBbdGhp
cywgb3BlcmF0aW9uLCBjb21wbGV0aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURCS2V5PiBrZXks
IFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
dmFsdWVCdWZmZXIsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpIHsKLSAgICAg
ICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBtX2N1cnNvci0+Y2xlYXIoKTsKLSAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKLSAgICAgICAgfSBlbHNlIGlmICgha2V5
KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGVycm9yIGJ1dCBhbHNvIG5vIGtleSwg
dGhlbiB0aGUgY3Vyc29yIHJlYWNoZWQgdGhlIGVuZC4KLSAgICAgICAgICAgIG1fY3Vyc29yLT5j
bGVhcigpOwotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhzdGF0aWNfY2FzdDxT
aGFyZWRCdWZmZXIqPihudWxscHRyKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBt
X2N1cnNvci0+dXBkYXRlQ3Vyc29yRGF0YShrZXkuZ2V0KCksIHByaW1hcnlLZXkuZ2V0KCksIHZh
bHVlQnVmZmVyLmdldCgpKTsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moa2V5
LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlcik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGSVhN
RTogQ3Vyc29yIG9wZXJhdGlvbnMgc2hvdWxkIGJlIGFibGUgdG8gcGFzcyBhbG9uZyBhbiBlcnJv
ciBpbnN0ZWFkIG9mIHN1Y2Nlc3MKLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7Ci0gICAg
fTsKLQotICAgIG1fY3Vyc29yLT50cmFuc2FjdGlvbigpLmRhdGFiYXNlKCkuc2VydmVyQ29ubmVj
dGlvbigpLmN1cnNvckl0ZXJhdGUoKm1fY3Vyc29yLCAqdGhpcywgY2FsbGJhY2spOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEVEKElOREVYRURfREFUQUJB
U0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA2Mjc5NzdiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oCisrKyAv
ZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQkN1cnNvckJhY2tlbmRP
cGVyYXRpb25zX2gKLSNkZWZpbmUgSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnNfaAotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgi
Ci0jaW5jbHVkZSAiSURCT3BlcmF0aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgQ3Vyc29ySXRlcmF0aW9uT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkN1
cnNvckJhY2tlbmQ+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbihjdXJzb3IsIGtleSwgY2FsbGJhY2tzKSk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21w
bGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOwotCi0gICAgaW50NjRfdCBjdXJzb3JJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yLT5pZCgpOyB9Ci0gICAgSURCS2V5KiBrZXkoKSBjb25z
dCB7IHJldHVybiBtX2tleS5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIEN1cnNvckl0ZXJhdGlv
bk9wZXJhdGlvbihQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAg
ICAgOiBtX2N1cnNvcihjdXJzb3IpCi0gICAgICAgICwgbV9rZXkoa2V5KQotICAgICAgICAsIG1f
Y2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkN1cnNv
ckJhY2tlbmQ+IG1fY3Vyc29yOwotICAgIFJlZlB0cjxJREJLZXk+IG1fa2V5OwotICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgQ3Vyc29yQWR2YW5jZU9w
ZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8
SURCT3BlcmF0aW9uPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBjdXJzb3Is
IHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Mp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDdXJzb3JBZHZhbmNlT3BlcmF0
aW9uKGN1cnNvciwgY291bnQsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQg
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSBvdmVycmlk
ZSBmaW5hbDsKLQotICAgIGludDY0X3QgY3Vyc29ySUQoKSBjb25zdCB7IHJldHVybiBtX2N1cnNv
ci0+aWQoKTsgfQotICAgIHVuc2lnbmVkIGxvbmcgY291bnQoKSBjb25zdCB7IHJldHVybiBtX2Nv
dW50OyB9Ci0KLXByaXZhdGU6Ci0gICAgQ3Vyc29yQWR2YW5jZU9wZXJhdGlvbihQYXNzUmVmUHRy
PElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciwgdW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAgICAgOiBtX2N1cnNvcihjdXJzb3IpCi0g
ICAgICAgICwgbV9jb3VudChjb3VudCkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3Mp
Ci0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBtX2N1cnNvcjsK
LSAgICB1bnNpZ25lZCBsb25nIG1fY291bnQ7Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9u
c19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
SURCRGF0YWJhc2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmODFiZjRkLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjIy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJh
c2VCYWNrZW5kLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUg
IklEQkN1cnNvckJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgot
I2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklE
QlJlY29yZElkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJJREJTZXJ2ZXJDb25uZWN0aW9uLmgiCi0j
aW5jbHVkZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKLSNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hhbmdlLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotUmVmPElEQkRhdGFiYXNlQmFja2VuZD4gSURCRGF0YWJhc2VCYWNrZW5kOjpj
cmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIs
IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5LCBJREJTZXJ2ZXJDb25uZWN0aW9u
JiBzZXJ2ZXJDb25uZWN0aW9uKQotewotICAgIFJlZjxJREJEYXRhYmFzZUJhY2tlbmQ+IGJhY2tl
bmQgPSBhZG9wdFJlZigqbmV3IElEQkRhdGFiYXNlQmFja2VuZChuYW1lLCB1bmlxdWVJZGVudGlm
aWVyLCBmYWN0b3J5LCBzZXJ2ZXJDb25uZWN0aW9uKSk7Ci0gICAgYmFja2VuZC0+b3BlbkludGVy
bmFsQXN5bmMoKTsKLSAgICAKLSAgICByZXR1cm4gYmFja2VuZDsKLX0KLQotSURCRGF0YWJhc2VC
YWNrZW5kOjpJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHVuaXF1ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5
LCBJREJTZXJ2ZXJDb25uZWN0aW9uJiBzZXJ2ZXJDb25uZWN0aW9uKQotICAgIDogbV9tZXRhZGF0
YShuYW1lLCBJbnZhbGlkSWQsIDAsIEludmFsaWRJZCkKLSAgICAsIG1faWRlbnRpZmllcih1bmlx
dWVJZGVudGlmaWVyKQotICAgICwgbV9mYWN0b3J5KGZhY3RvcnkpCi0gICAgLCBtX3NlcnZlckNv
bm5lY3Rpb24oc2VydmVyQ29ubmVjdGlvbikKLSAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
cihzdGQ6Om1ha2VfdW5pcXVlPElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+KCkpCi0gICAgLCBt
X2Nsb3NpbmdDb25uZWN0aW9uKGZhbHNlKQotICAgICwgbV9kaWRPcGVuSW50ZXJuYWwoZmFsc2Up
Ci17Ci0gICAgQVNTRVJUKCFtX21ldGFkYXRhLm5hbWUuaXNOdWxsKCkpOwotfQotCi12b2lkIElE
QkRhdGFiYXNlQmFja2VuZDo6YWRkT2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYgb2JqZWN0U3RvcmUsIGludDY0X3QgbmV3TWF4T2JqZWN0U3RvcmVJZCkKLXsKLSAgICBB
U1NFUlQoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlLmlkKSk7
Ci0gICAgaWYgKG5ld01heE9iamVjdFN0b3JlSWQgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6
SW52YWxpZElkKSB7Ci0gICAgICAgIEFTU0VSVChtX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQg
PCBuZXdNYXhPYmplY3RTdG9yZUlkKTsKLSAgICAgICAgbV9tZXRhZGF0YS5tYXhPYmplY3RTdG9y
ZUlkID0gbmV3TWF4T2JqZWN0U3RvcmVJZDsKLSAgICB9Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuc2V0KG9iamVjdFN0b3JlLmlkLCBvYmplY3RTdG9yZSk7Ci19Ci0KLXZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kOjpyZW1vdmVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi17
Ci0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3Jl
SWQpKTsKLSAgICBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7
Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjphZGRJbmRleChpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4LCBpbnQ2NF90IG5ld01heEluZGV4
SWQpCi17Ci0gICAgQVNTRVJUKG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVj
dFN0b3JlSWQpKTsKLSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlID0gbV9t
ZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpOwotCi0gICAgQVNTRVJUKCFv
YmplY3RTdG9yZS5pbmRleGVzLmNvbnRhaW5zKGluZGV4LmlkKSk7Ci0gICAgb2JqZWN0U3RvcmUu
aW5kZXhlcy5zZXQoaW5kZXguaWQsIGluZGV4KTsKLSAgICBpZiAobmV3TWF4SW5kZXhJZCAhPSBJ
REJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAgQVNTRVJUKG9iamVjdFN0b3Jl
Lm1heEluZGV4SWQgPCBuZXdNYXhJbmRleElkKTsKLSAgICAgICAgb2JqZWN0U3RvcmUubWF4SW5k
ZXhJZCA9IG5ld01heEluZGV4SWQ7Ci0gICAgfQotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVz
LnNldChvYmplY3RTdG9yZUlkLCBvYmplY3RTdG9yZSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kOjpyZW1vdmVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCkKLXsKLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0
U3RvcmVJZCkpOwotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCk7Ci0KLSAgICBBU1NFUlQob2Jq
ZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7Ci0gICAgb2JqZWN0U3RvcmUuaW5k
ZXhlcy5yZW1vdmUoaW5kZXhJZCk7Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG9i
amVjdFN0b3JlSWQsIG9iamVjdFN0b3JlKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6
Om9wZW5JbnRlcm5hbEFzeW5jKCkKLXsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBz
ZWxmID0gdGhpczsKLSAgICBtX3NlcnZlckNvbm5lY3Rpb24tPmdldE9yRXN0YWJsaXNoSURCRGF0
YWJhc2VNZXRhZGF0YShbc2VsZl0oY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEs
IGJvb2wgc3VjY2VzcykgewotICAgICAgICBzZWxmLT5kaWRPcGVuSW50ZXJuYWxBc3luYyhtZXRh
ZGF0YSwgc3VjY2Vzcyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpk
aWRPcGVuSW50ZXJuYWxBc3luYyhjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwg
Ym9vbCBzdWNjZXNzKQotewotICAgIG1fZGlkT3BlbkludGVybmFsID0gdHJ1ZTsKLQotICAgIGlm
ICghc3VjY2VzcykgewotICAgICAgICBwcm9jZXNzUGVuZGluZ09wZW5DYWxscyhmYWxzZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX21ldGFkYXRhID0gbWV0YWRhdGE7Ci0KLSAg
ICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci19Ci0KLUlEQkRhdGFiYXNlQmFja2VuZDo6fklEQkRh
dGFiYXNlQmFja2VuZCgpCi17Ci0gICAgbV9mYWN0b3J5LT5yZW1vdmVJREJEYXRhYmFzZUJhY2tl
bmQobV9pZGVudGlmaWVyKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZU9i
amVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0lu
Y3JlbWVudCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6Y3Jl
YXRlT2JqZWN0U3RvcmUiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9u
ID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rp
b24pCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJ
bmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBBU1NFUlQo
IW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSWQpKTsKLSAgICBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEobmFtZSwgb2JqZWN0U3Rv
cmVJZCwga2V5UGF0aCwgYXV0b0luY3JlbWVudCwgSURCRGF0YWJhc2VCYWNrZW5kOjpNaW5pbXVt
SW5kZXhJZCk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVDcmVhdGVPYmplY3RTdG9yZU9w
ZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhKTsKLSAgICBhZGRPYmplY3RTdG9yZShvYmplY3RT
dG9yZU1ldGFkYXRhLCBvYmplY3RTdG9yZUlkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmQ6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpk
ZWxldGVPYmplY3RTdG9yZSIpOwotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rp
b24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2Fj
dGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09
IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFTU0VS
VChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAg
Y29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKLQotICAgIHRyYW5zYWN0aW9u
LT5zY2hlZHVsZURlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKG9iamVjdFN0b3JlTWV0YWRhdGEp
OwotICAgIHJlbW92ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQpOwotfQotCi12b2lkIElEQkRh
dGFiYXNlQmFja2VuZDo6Y3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5KQotewot
ICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJhc2VCYWNrZW5kOjpjcmVhdGVJbmRleCIpOwot
ICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5n
ZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJu
OwotICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKLQotICAgIEFTU0VSVChtX21ldGFkYXRhLm9iamVjdFN0
b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlkKSk7Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSBvYmplY3RTdG9yZSA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RT
dG9yZUlkKTsKLQotICAgIEFTU0VSVCghb2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRl
eElkKSk7Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSBpbmRleE1ldGFkYXRhKG5hbWUsIGlu
ZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRyeSk7Ci0KLSAgICB0cmFuc2FjdGlvbi0+
c2NoZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRh
KTsKLQotICAgIGFkZEluZGV4KG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEsIGluZGV4SWQp
OwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlSW5kZXgoaW50NjRfdCB0cmFu
c2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6ZGVsZXRlSW5kZXgiKTsKLSAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0
KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0gICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZTo6VmVyc2lvbkNoYW5nZSk7Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS5vYmplY3RTdG9y
ZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0
YWRhdGEgb2JqZWN0U3RvcmUgPSBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3Rv
cmVJZCk7Ci0KLSAgICBBU1NFUlQob2JqZWN0U3RvcmUuaW5kZXhlcy5jb250YWlucyhpbmRleElk
KSk7Ci0gICAgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSA9IG9iamVjdFN0
b3JlLmluZGV4ZXMuZ2V0KGluZGV4SWQpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNjaGVkdWxlRGVs
ZXRlSW5kZXhPcGVyYXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSk7Ci0KLSAgICBy
ZW1vdmVJbmRleChvYmplY3RTdG9yZUlkLCBpbmRleElkKTsKLX0KLQotdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OmNvbW1pdChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCi17Ci0gICAgLy8gVGhlIGZy
b250ZW5kIHN1Z2dlc3RzIHRoYXQgd2UgY29tbWl0LCBidXQgd2UgbWF5IGhhdmUgcHJldmlvdXNs
eSBpbml0aWF0ZWQgYW4gYWJvcnQsIGFuZCBzbyBoYXZlIGRpc3Bvc2VkIG9mIHRoZSB0cmFuc2Fj
dGlvbi4gb25BYm9ydCBoYXMgYWxyZWFkeSBiZWVuIGRpc3BhdGNoZWQgdG8gdGhlIGZyb250ZW5k
LCBzbyBpdCB3aWxsIGZpbmQgb3V0IGFib3V0IHRoYXQgYXN5bmNocm9ub3VzbHkuCi0gICAgaWYg
KG1fdHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKQotICAgICAgICBtX3RyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCktPmNvbW1pdCgpOwotfQotCi12b2lkIElEQkRhdGFi
YXNlQmFja2VuZDo6YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkKQotewotICAgIC8vIElmIHRo
ZSB0cmFuc2FjdGlvbiBpcyB1bmtub3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRl
ZCBieSB0aGUgYmFja2VuZCBiZWZvcmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUgdG8gaWdub3Jl
IGl0LgotICAgIGlmIChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKLSAg
ICAgICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydCgpOwotfQotCi12
b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6YWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQotewotICAgIC8vIElmIHRoZSB0cmFuc2Fj
dGlvbiBpcyB1bmtub3duLCB0aGVuIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWJvcnRlZCBieSB0aGUg
YmFja2VuZCBiZWZvcmUgdGhpcyBjYWxsIHNvIGl0IGlzIHNhZmUgdG8gaWdub3JlIGl0LgotICAg
IGlmIChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKLSAgICAgICAgbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpLT5hYm9ydChlcnJvcik7Ci19Ci0KLXZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kOjpnZXQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5
UmFuZ2UsIGJvb2wga2V5T25seSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykK
LXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFja2VuZDo6Z2V0Iik7Ci0gICAg
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICB0cmFuc2FjdGlvbi0+c2NoZWR1bGVHZXRPcGVyYXRpb24obV9tZXRhZGF0YSwgb2JqZWN0
U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGtleU9ubHkgPyBJbmRleGVkREI6OkN1cnNvclR5
cGU6OktleU9ubHkgOiBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleUFuZFZhbHVlLCBjYWxsYmFj
a3MpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6cHV0KGludDY0X3QgdHJhbnNhY3Rp
b25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFs
dWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywg
Y29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKLXsKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIklEQkRhdGFiYXNlQmFja2VuZDo6cHV0Iik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
KiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBp
ZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9u
LT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5KTsKLQotICAg
IGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb2JqZWN0U3RvcmVNZXRhZGF0YSA9IG1fbWV0
YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKTsKLQotICAgIEFTU0VSVChvYmpl
Y3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQgfHwga2V5LmdldCgpKTsKLQotICAgIHRyYW5z
YWN0aW9uLT5zY2hlZHVsZVB1dE9wZXJhdGlvbihvYmplY3RTdG9yZU1ldGFkYXRhLCB2YWx1ZSwg
a2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRleEtleXMpOwotfQotCi12b2lk
IElEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JRCwg
aW50NjRfdCBvYmplY3RTdG9yZUlELCBQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwg
Y29uc3QgVmVjdG9yPGludDY0X3QsIDE+JiBpbmRleElEcywgY29uc3QgVmVjdG9yPEluZGV4S2V5
cywgMT4mIGluZGV4S2V5cykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFj
a2VuZDo6c2V0SW5kZXhLZXlzIik7Ci0gICAgQVNTRVJUKHBycFByaW1hcnlLZXkpOwotICAgIEFT
U0VSVChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlEKSk7Ci0K
LSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNh
Y3Rpb25zLmdldCh0cmFuc2FjdGlvbklEKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAg
ICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpOwotCi0gICAgUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleSA9IHBycFByaW1hcnlLZXk7Ci0gICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT5zZXRJbmRl
eEtleXModHJhbnNhY3Rpb25JRCwgbV9tZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmVJRCwgbV9tZXRh
ZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSUQpLCAqcHJpbWFyeUtleSwgaW5kZXhJ
RHMsIGluZGV4S2V5cywgW3RyYW5zYWN0aW9uXShQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
IGVycm9yKSB7Ci0gICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5h
Ym9ydChlcnJvcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpzZXRJ
bmRleGVzUmVhZHkoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90LCBjb25zdCBWZWN0b3I8
aW50NjRfdCwgMT4mIGluZGV4SWRzKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiSURCRGF0YWJh
c2VCYWNrZW5kOjpzZXRJbmRleGVzUmVhZHkiKTsKLQotICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZCk7Ci0gICAg
aWYgKCF0cmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdHJhbnNhY3Rpb24tPnNj
aGVkdWxlU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKGluZGV4SWRzLnNpemUoKSk7Ci19Ci0KLXZv
aWQgSURCRGF0YWJhc2VCYWNrZW5kOjpvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24sIGJv
b2wga2V5T25seSwgVGFza1R5cGUgdGFza1R5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6Om9w
ZW5DdXJzb3IiKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24pCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZU9wZW5DdXJzb3JPcGVy
YXRpb24ob2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwga2V5T25s
eSA/IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5T25seSA6IEluZGV4ZWREQjo6Q3Vyc29yVHlw
ZTo6S2V5QW5kVmFsdWUsIHRhc2tUeXBlLCBjYWxsYmFja3MpOwotfQotCi12b2lkIElEQkRhdGFi
YXNlQmFja2VuZDo6Y291bnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi17Ci0gICAgTE9HKFN0b3JhZ2VB
UEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmNvdW50Iik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAg
ICBpZiAoIXRyYW5zYWN0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9tZXRh
ZGF0YS5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3RvcmVJZCkpOwotICAgIHRyYW5zYWN0
aW9uLT5zY2hlZHVsZUNvdW50T3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJh
bmdlLCBjYWxsYmFja3MpOwotfQotCi0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVS
YW5nZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0
ZVJhbmdlIik7Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiA9IG1fdHJh
bnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKQotICAg
ICAgICByZXR1cm47Ci0gICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERC
OjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5KTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVs
ZURlbGV0ZVJhbmdlT3BlcmF0aW9uKG9iamVjdFN0b3JlSWQsIGtleVJhbmdlLCBjYWxsYmFja3Mp
OwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y2xlYXJPYmplY3RTdG9yZShpbnQ2NF90
IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQkRhdGFiYXNlQmFj
a2VuZDo6Y2xlYXJPYmplY3RTdG9yZSAlbGxpIGluIHRyYW5zYWN0aW9uICVsbGkiLCBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KG9iamVjdFN0b3JlSWQpLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHRy
YW5zYWN0aW9uSWQpKTsKLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWQpOwotICAgIGlmICghdHJhbnNhY3Rpb24p
Ci0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJbmRl
eGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6UmVhZE9ubHkpOwotCi0gICAgdHJhbnNhY3Rpb24tPnNj
aGVkdWxlQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbihvYmplY3RTdG9yZUlkLCBjYWxsYmFja3Mp
OwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6dHJhbnNhY3Rpb25TdGFydGVkKElEQlRy
YW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24pCi17Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5t
b2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpIHsKLSAg
ICAgICAgQVNTRVJUKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pOwotICAgICAg
ICBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjsKLSAgICB9
Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjp0cmFuc2FjdGlvbkZpbmlzaGVkKElEQlRy
YW5zYWN0aW9uQmFja2VuZCogcmF3VHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZD4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjsKLSAgICBBU1NFUlQo
bV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24tPmlkKCkpKTsKLSAgICBBU1NFUlQo
bV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLT5pZCgpKSA9PSB0cmFuc2FjdGlvbi5nZXQo
KSk7Ci0gICAgbV90cmFuc2FjdGlvbnMucmVtb3ZlKHRyYW5zYWN0aW9uLT5pZCgpKTsKLSAgICBp
ZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVy
c2lvbkNoYW5nZSkgewotICAgICAgICBBU1NFUlQodHJhbnNhY3Rpb24uZ2V0KCkgPT0gbV9ydW5u
aW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLmdldCgpKTsKLSAgICAgICAgbV9ydW5uaW5nVmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0KLXZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kOjp0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZChJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHJhd1RyYW5zYWN0aW9uKQotewotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmQ+IHRyYW5zYWN0aW9uID0gcmF3VHJhbnNhY3Rpb247Ci0gICAgaWYgKHRyYW5zYWN0
aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2Up
IHsKLSAgICAgICAgLy8gSWYgdGhpcyB3YXMgYW4gb3Blbi13aXRoLXZlcnNpb24gY2FsbCwgdGhl
cmUgd2lsbCBiZSBhICJzZWNvbmQKLSAgICAgICAgLy8gaGFsZiIgb3BlbiBjYWxsIHdhaXRpbmcg
Zm9yIHVzIGluIHByb2Nlc3NQZW5kaW5nQ2FsbHMuCi0gICAgICAgIC8vIEZJWE1FOiBXaGVuIHdl
IG5vIGxvbmdlciBzdXBwb3J0IHNldFZlcnNpb24sIGFzc2VydCBzdWNoIGEgdGhpbmcuCi0gICAg
ICAgIGlmIChtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbikgewotICAgICAgICAgICAgbV9wZW5kaW5n
U2Vjb25kSGFsZk9wZW4tPmNhbGxiYWNrcygpLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRFcnJvciwgIlZlcnNpb24gY2hhbmdlIHRy
YW5zYWN0aW9uIHdhcyBhYm9ydGVkIGluIHVwZ3JhZGVuZWVkZWQgZXZlbnQgaGFuZGxlci4iKSk7
Ci0gICAgICAgICAgICBtX3BlbmRpbmdTZWNvbmRIYWxmT3BlbiA9IG51bGxwdHI7Ci0gICAgICAg
IH0KLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotICAgIH0KLX0KLQotdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmQ6OnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKElEQlRy
YW5zYWN0aW9uQmFja2VuZCogcmF3VHJhbnNhY3Rpb24pCi17Ci0gICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZD4gdHJhbnNhY3Rpb24gPSByYXdUcmFuc2FjdGlvbjsKLSAgICBpZiAodHJh
bnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNo
YW5nZSkKLSAgICAgICAgcHJvY2Vzc1BlbmRpbmdDYWxscygpOwotfQotCi1zaXplX3QgSURCRGF0
YWJhc2VCYWNrZW5kOjpjb25uZWN0aW9uQ291bnQoKQotewotICAgIC8vIFRoaXMgZG9lcyBub3Qg
aW5jbHVkZSBwZW5kaW5nIG9wZW4gY2FsbHMsIGFzIHRob3NlIHNob3VsZCBub3QgYmxvY2sgdmVy
c2lvbiBjaGFuZ2VzIGFuZCBkZWxldGVzLgotICAgIHJldHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tz
U2V0LnNpemUoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OnByb2Nlc3NQZW5kaW5n
Q2FsbHMoKQotewotICAgIC8vIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKSB3aWxsIGJlIGNhbGxlZCBh
Z2FpbiBhZnRlciBvcGVuSW50ZXJuYWxBc3luYygpIGNvbXBsZXRlcy4KLSAgICBpZiAoIW1fZGlk
T3BlbkludGVybmFsKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9wZW5kaW5nU2Vjb25k
SGFsZk9wZW4pIHsKLSAgICAgICAgQVNTRVJUKG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT52ZXJz
aW9uKCkgPT0gbV9tZXRhZGF0YS52ZXJzaW9uKTsKLSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEu
aWQgIT0gSW52YWxpZElkKTsKLSAgICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmNhbGxi
YWNrcygpLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7Ci0gICAgICAgIG1fcGVu
ZGluZ1NlY29uZEhhbGZPcGVuID0gbnVsbHB0cjsKLSAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHdo
ZW4gY29tcGxldGUsIGFzIHBlbmRpbmcgZGVsZXRlcyBtYXkgYmUgKHBhcnRpYWxseSkgdW5ibG9j
a2VkLgotICAgIH0KLQotICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNoZWNrIGlzIG9ubHkgYW4gb3B0
aW1pemF0aW9uIHRvIHJlZHVjZSBxdWV1ZS1jaHVybiBhbmQKLSAgICAvLyBub3QgbmVjZXNzYXJ5
IGZvciBjb3JyZWN0bmVzczsgZGVsZXRlRGF0YWJhc2UgYW5kIG9wZW5Db25uZWN0aW9uIHdpbGwK
LSAgICAvLyByZXF1ZXVlIHRoZWlyIGNhbGxzIGlmIHRoaXMgY29uZGl0aW9uIGlzIHRydWUuCi0g
ICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKCFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkgJiYgaXNEZWxldGVE
YXRhYmFzZUJsb2NrZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdoaWxlICghbV9wZW5kaW5n
RGVsZXRlQ2FsbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJQZW5k
aW5nRGVsZXRlQ2FsbD4gcGVuZGluZ0RlbGV0ZUNhbGwgPSBtX3BlbmRpbmdEZWxldGVDYWxscy50
YWtlRmlyc3QoKTsKLSAgICAgICAgbV9kZWxldGVDYWxsYmFja3NXYWl0aW5nQ29tcGxldGlvbi5h
ZGQocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKLSAgICAgICAgZGVsZXRlRGF0YWJh
c2VBc3luYyhwZW5kaW5nRGVsZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOwotICAgIH0KLQotICAgIC8v
IGRlbGV0ZURhdGFiYXNlQXN5bmMgc2hvdWxkIG5ldmVyIHJlLXF1ZXVlIGNhbGxzLgotICAgIEFT
U0VSVChtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpOwotCi0gICAgLy8gSWYgdGhlcmUg
YXJlIGFueSBkYXRhYmFzZSBkZWxldGlvbnMgd2FpdGluZyBmb3IgY29tcGxldGlvbiwgd2UncmUg
ZG9uZSBmb3Igbm93LgotICAgIC8vIEZ1cnRoZXIgY2FsbGJhY2tzIHdpbGwgYmUgaGFuZGxlZCBp
biBhIGZ1dHVyZSBjYWxsIHRvIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKS4KLSAgICBpZiAoIW1fZGVs
ZXRlQ2FsbGJhY2tzV2FpdGluZ0NvbXBsZXRpb24uaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBwcm9jZXNzUGVuZGluZ09wZW5DYWxscyh0cnVlKTsKLX0KLQotdm9pZCBJ
REJEYXRhYmFzZUJhY2tlbmQ6OnByb2Nlc3NQZW5kaW5nT3BlbkNhbGxzKGJvb2wgc3VjY2VzcykK
LXsKLSAgICAvLyBPcGVuIGNhbGxzIGNhbiBiZSByZXF1ZXVlZCBpZiBhbiBvcGVuIGNhbGwgc3Rh
cnRlZCBhIHZlcnNpb24gY2hhbmdlIHRyYW5zYWN0aW9uIG9yIGRlbGV0ZXMgdGhlIGRhdGFiYXNl
LgotICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxJREJQZW5kaW5nT3BlbkNhbGw+PiBwZW5kaW5n
T3BlbkNhbGxzOwotICAgIG1fcGVuZGluZ09wZW5DYWxscy5zd2FwKHBlbmRpbmdPcGVuQ2FsbHMp
OwotCi0gICAgd2hpbGUgKCFwZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgewotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SURCUGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwgPSBwZW5k
aW5nT3BlbkNhbGxzLnRha2VGaXJzdCgpOwotICAgICAgICBpZiAoc3VjY2VzcykgewotICAgICAg
ICAgICAgaWYgKG1fbWV0YWRhdGEuaWQgPT0gSW52YWxpZElkKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhpcyBkYXRhYmFzZSB3YXMgZGVsZXRlZCB0aGVuIHF1aWNrbHkgcmUtb3BlbmVkLgotICAg
ICAgICAgICAgICAgIC8vIG9wZW5JbnRlcm5hbEFzeW5jKCkgd2lsbCByZWNyZWF0ZSBpdCBpbiB0
aGUgYmFja2luZyBzdG9yZSBhbmQgdGhlbiByZXN1bWUgcHJvY2Vzc2luZyBwZW5kaW5nIGNhbGxi
YWNrcy4KLSAgICAgICAgICAgICAgICBwZW5kaW5nT3BlbkNhbGxzLnByZXBlbmQoV1RGTW92ZShw
ZW5kaW5nT3BlbkNhbGwpKTsKLSAgICAgICAgICAgICAgICBwZW5kaW5nT3BlbkNhbGxzLnN3YXAo
bV9wZW5kaW5nT3BlbkNhbGxzKTsKLQotICAgICAgICAgICAgICAgIG9wZW5JbnRlcm5hbEFzeW5j
KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
b3BlbkNvbm5lY3Rpb25JbnRlcm5hbChwZW5kaW5nT3BlbkNhbGwtPmNhbGxiYWNrcygpLCBwZW5k
aW5nT3BlbkNhbGwtPmRhdGFiYXNlQ2FsbGJhY2tzKCksIHBlbmRpbmdPcGVuQ2FsbC0+dHJhbnNh
Y3Rpb25JZCgpLCBwZW5kaW5nT3BlbkNhbGwtPnZlcnNpb24oKSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICAgICAgICAgIGlmIChwZW5kaW5nT3Bl
bkNhbGwtPnZlcnNpb24oKSA9PSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pCi0g
ICAgICAgICAgICAgICAgbWVzc2FnZSA9ICJJbnRlcm5hbCBlcnJvciBvcGVuaW5nIGRhdGFiYXNl
IHdpdGggbm8gdmVyc2lvbiBzcGVjaWZpZWQuIjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIG9wZW5pbmcg
ZGF0YWJhc2Ugd2l0aCB2ZXJzaW9uICUiIFBSSXU2NCwgcGVuZGluZ09wZW5DYWxsLT52ZXJzaW9u
KCkpOwotICAgICAgICAgICAgcGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKS0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJv
ciwgbWVzc2FnZSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIElEQkRhdGFiYXNlQmFj
a2VuZDo6Y3JlYXRlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYg
b2JqZWN0U3RvcmVJRHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCi17Ci0gICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OmNyZWF0ZSh0aGlzLCB0cmFuc2FjdGlvbklELCBjYWxsYmFja3MsIG9iamVjdFN0
b3JlSURzLCBtb2RlKTsKLQotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJh
bnNhY3Rpb25JRCkpOwotICAgIG1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbklELCB0cmFu
c2FjdGlvbi5nZXQoKSk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpvcGVuQ29ubmVj
dGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBEYXRhYmFzZUNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2Fj
dGlvbklkLCB1aW50NjRfdCB2ZXJzaW9uKQotewotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
IGRhdGFiYXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7Ci0KLSAgICBtX3BlbmRp
bmdPcGVuQ2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SURCUGVuZGluZ09wZW5DYWxsPigq
Y2FsbGJhY2tzLCAqZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pKTsK
LQotICAgIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmQ6Om9wZW5Db25uZWN0aW9uSW50ZXJuYWwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwRGF0YWJhc2VDYWxs
YmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbikKLXsKLSAgICBB
U1NFUlQobV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpKTsKLSAgICBBU1NFUlQoIW1fcnVu
bmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7Ci0KLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiBkYXRhYmFzZUNhbGxiYWNrcyA9IHBycERhdGFiYXNlQ2FsbGJhY2tzOwotCi0gICAgLy8g
V2UgaW5mZXIgdGhhdCB0aGUgZGF0YWJhc2UgZGlkbid0IGV4aXN0IGZyb20gaXRzIGxhY2sgb2Yg
dmVyc2lvbi4KLSAgICBib29sIGlzTmV3RGF0YWJhc2UgPSBtX21ldGFkYXRhLnZlcnNpb24gPT0g
SURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uOwotCi0gICAgaWYgKHZlcnNpb24gPT0g
SURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24gJiYgIWlzTmV3RGF0YWJhc2Up
IHsKLSAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VDYWxsYmFja3Mp
OwotICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzLCB0aGlzLT5tZXRhZGF0YSgpKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpc05ld0RhdGFiYXNlICYmIHZlcnNp
b24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6RGVmYXVsdEludFZlcnNpb24pIHsKLSAgICAgICAg
Ly8gU3BlYyBzYXlzOiBJZiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZCBhbmQgbm8gZGF0YWJhc2Ug
ZXhpc3RzLCBzZXQgZGF0YWJhc2UgdmVyc2lvbiB0byAxLgotICAgICAgICB2ZXJzaW9uID0gMTsK
LSAgICB9Ci0KLSAgICBpZiAodmVyc2lvbiA+IG1fbWV0YWRhdGEudmVyc2lvbiB8fCBtX21ldGFk
YXRhLnZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9JbnRWZXJzaW9uKSB7Ci0gICAg
ICAgIHJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihjYWxsYmFja3MsIGRhdGFiYXNlQ2Fs
bGJhY2tzLCB0cmFuc2FjdGlvbklkLCB2ZXJzaW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICh2ZXJzaW9uIDwgbV9tZXRhZGF0YS52ZXJzaW9uICYmIG1fbWV0YWRhdGEudmVy
c2lvbiAhPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24pIHsKLSAgICAgICAgY2Fs
bGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VmVyc2lvbkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiVGhlIHJlcXVlc3RlZCB2ZXJzaW9u
ICglIiBQUkl1NjQgIikgaXMgbGVzcyB0aGFuIHRoZSBleGlzdGluZyB2ZXJzaW9uICglIiBQUkl1
NjQgIikuIiwgdmVyc2lvbiwgbV9tZXRhZGF0YS52ZXJzaW9uKSkpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgQVNTRVJUKHZlcnNpb24gPT0gbV9tZXRhZGF0YS52ZXJzaW9uKTsKLSAg
ICBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3ModGhpcywgdGhpcy0+bWV0YWRhdGEoKSk7Ci19Ci0KLXZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gcHJwRGF0YWJhc2VDYWxsYmFja3MsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRf
dCByZXF1ZXN0ZWRWZXJzaW9uKQotewotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cyA9IHBycENhbGxiYWNrczsKLSAgICBSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFi
YXNlQ2FsbGJhY2tzID0gcHJwRGF0YWJhc2VDYWxsYmFja3M7Ci0gICAgQVNTRVJUKGNhbGxiYWNr
cyk7Ci0gICAgZm9yIChhdXRvJiBjYWxsYmFjayA6IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQpIHsK
LSAgICAgICAgLy8gRnJvbnQgZW5kIGVuc3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBj
b25uZWN0aW9ucyB0aGF0IGhhdmUgY2xvc2VQZW5kaW5nIHNldC4KLSAgICAgICAgaWYgKGNhbGxi
YWNrICE9IGRhdGFiYXNlQ2FsbGJhY2tzKQotICAgICAgICAgICAgY2FsbGJhY2stPm9uVmVyc2lv
bkNoYW5nZShtX21ldGFkYXRhLnZlcnNpb24sIHJlcXVlc3RlZFZlcnNpb24pOwotICAgIH0KLSAg
ICAvLyBUaGUgc3BlYyBkaWN0YXRlcyB3ZSB3YWl0IHVudGlsIGFsbCB0aGUgdmVyc2lvbiBjaGFu
Z2UgZXZlbnRzIGFyZQotICAgIC8vIGRlbGl2ZXJlZCBhbmQgdGhlbiBjaGVjayBtX2RhdGFiYXNl
Q2FsbGJhY2tzLmVtcHR5KCkgYmVmb3JlIHByb2NlZWRpbmcKLSAgICAvLyBvciBmaXJpbmcgYSBi
bG9ja2VkIGV2ZW50LCBidXQgaW5zdGVhZCB3ZSBzaG91bGQgYmUgY29uc2lzdGVudCB3aXRoIGhv
dwotICAgIC8vIHRoZSBvbGQgc2V0VmVyc2lvbiAoaW5jb3JyZWN0bHkpIGRpZCBpdC4KLSAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoZSBjYWxsIHRvIG9uQmxvY2tlZCBhbmQgaW5zdGVhZCB3YWl0IHVu
dGlsIHRoZSBmcm9udGVuZAotICAgIC8vIHRlbGxzIHVzIHRoYXQgYWxsIHRoZSBibG9ja2VkIGV2
ZW50cyBoYXZlIGJlZW4gZGVsaXZlcmVkLiBTZWUKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKLSAgICBpZiAoY29ubmVjdGlvbkNvdW50KCkpCi0g
ICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKG1fbWV0YWRhdGEudmVyc2lvbik7Ci0gICAgLy8g
RklYTUU6IEFkZCB0ZXN0IGZvciBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24uCi0g
ICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCBjb25uZWN0aW9uQ291
bnQoKSkgewotICAgICAgICBtX3BlbmRpbmdPcGVuQ2FsbHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlx
dWU8SURCUGVuZGluZ09wZW5DYWxsPigqY2FsbGJhY2tzLCAqZGF0YWJhc2VDYWxsYmFja3MsIHRy
YW5zYWN0aW9uSWQsIHJlcXVlc3RlZFZlcnNpb24pKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIFZlY3RvcjxpbnQ2NF90PiBvYmplY3RTdG9yZUlkczsKLSAgICBjcmVhdGVUcmFuc2Fj
dGlvbih0cmFuc2FjdGlvbklkLCBkYXRhYmFzZUNhbGxiYWNrcywgb2JqZWN0U3RvcmVJZHMsIElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9uQ2hhbmdlKTsKLSAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kPiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFu
c2FjdGlvbklkKTsKLQotICAgIHRyYW5zYWN0aW9uLT5zY2hlZHVsZVZlcnNpb25DaGFuZ2VPcGVy
YXRpb24ocmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCBkYXRhYmFzZUNhbGxiYWNrcywgbV9t
ZXRhZGF0YSk7Ci0KLSAgICBBU1NFUlQoIW1fcGVuZGluZ1NlY29uZEhhbGZPcGVuKTsKLSAgICBt
X2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmFkZChkYXRhYmFzZUNhbGxiYWNrcyk7Ci19Ci0KLXZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kOjpkZWxldGVEYXRhYmFzZShQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gcHJwQ2FsbGJhY2tzKQotewotICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9
IHBycENhbGxiYWNrczsKLSAgICBpZiAoaXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKSkgewotICAg
ICAgICBmb3IgKGF1dG8mIGNhbGxiYWNrIDogbV9kYXRhYmFzZUNhbGxiYWNrc1NldCkgewotICAg
ICAgICAgICAgLy8gRnJvbnQgZW5kIGVuc3VyZXMgdGhlIGV2ZW50IGlzIG5vdCBmaXJlZCBhdCBj
b25uZWN0aW9ucyB0aGF0IGhhdmUgY2xvc2VQZW5kaW5nIHNldC4KLSAgICAgICAgICAgIGNhbGxi
YWNrLT5vblZlcnNpb25DaGFuZ2UobV9tZXRhZGF0YS52ZXJzaW9uLCAwKTsKLSAgICAgICAgfQot
ICAgICAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBpZiB0aGVyZSBhcmUgb3BlbiBj
b25uZWN0aW9ucyBhZnRlciB0aGUKLSAgICAgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUg
cmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJlLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKLSAgICAgICAgY2FsbGJhY2tzLT5v
bkJsb2NrZWQobV9tZXRhZGF0YS52ZXJzaW9uKTsKLSAgICAgICAgbV9wZW5kaW5nRGVsZXRlQ2Fs
bHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8SURCUGVuZGluZ0RlbGV0ZUNhbGw+KGNhbGxiYWNr
cy5yZWxlYXNlKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBkZWxldGVEYXRhYmFz
ZUFzeW5jKGNhbGxiYWNrcy5yZWxlYXNlKCkpOwotfQotCi1ib29sIElEQkRhdGFiYXNlQmFja2Vu
ZDo6aXNEZWxldGVEYXRhYmFzZUJsb2NrZWQoKQotewotICAgIHJldHVybiBjb25uZWN0aW9uQ291
bnQoKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6OmRlbGV0ZURhdGFiYXNlQXN5bmMo
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKLXsKLSAgICBBU1NFUlQoIWlz
RGVsZXRlRGF0YWJhc2VCbG9ja2VkKCkpOwotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2Vu
ZD4gc2VsZih0aGlzKTsKLSAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBD
YWxsYmFja3M7Ci0gICAgbV9zZXJ2ZXJDb25uZWN0aW9uLT5kZWxldGVEYXRhYmFzZShtX21ldGFk
YXRhLm5hbWUsIFtzZWxmLCBjYWxsYmFja3NdKGJvb2wgc3VjY2VzcykgewotICAgICAgICBzZWxm
LT5tX2RlbGV0ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uLnJlbW92ZShjYWxsYmFja3MpOwot
Ci0gICAgICAgIC8vIElmIHRoaXMgSURCRGF0YWJhc2VCYWNrZW5kIHdhcyBjbG9zZWQgd2hpbGUg
d2FpdGluZyBmb3IgZGVsZXRlRGF0YWJhc2UgdG8gY29tcGxldGUsIG5vIHBvaW50IGluIHBlcmZv
cm1pbmcgYW55IGNhbGxiYWNrcy4KLSAgICAgICAgaWYgKCFzZWxmLT5tX3NlcnZlckNvbm5lY3Rp
b24tPmlzQ2xvc2VkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKHN1Y2Nl
c3MpIHsKLSAgICAgICAgICAgIHNlbGYtPm1fbWV0YWRhdGEuaWQgPSBJbnZhbGlkSWQ7Ci0gICAg
ICAgICAgICBzZWxmLT5tX21ldGFkYXRhLnZlcnNpb24gPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpO
b0ludFZlcnNpb247Ci0gICAgICAgICAgICBzZWxmLT5tX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5j
bGVhcigpOwotICAgICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoKTsKLSAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3Jl
YXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBk
ZWxldGluZyBkYXRhYmFzZS4iKSk7Ci0KLSAgICAgICAgc2VsZi0+cHJvY2Vzc1BlbmRpbmdDYWxs
cygpOwotICAgIH0pOwotfQotCi12b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6Y2xvc2UoUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQotewotICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwotICAgIEFTU0VS
VChtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmNvbnRhaW5zKGNhbGxiYWNrcykpOwotCi0gICAgbV9k
YXRhYmFzZUNhbGxiYWNrc1NldC5yZW1vdmUoY2FsbGJhY2tzKTsKLSAgICBpZiAobV9wZW5kaW5n
U2Vjb25kSGFsZk9wZW4gJiYgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4tPmRhdGFiYXNlQ2FsbGJh
Y2tzKCkgPT0gY2FsbGJhY2tzKSB7Ci0gICAgICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLT5j
YWxsYmFja3MoKS0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VF
eGNlcHRpb246OkFib3J0RXJyb3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkLiIpKTsKLSAg
ICAgICAgbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW4gPSBudWxscHRyOwotICAgIH0KLQotICAgIGlm
IChjb25uZWN0aW9uQ291bnQoKSA+IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIHByb2Nl
c3NQZW5kaW5nQ2FsbHMgYWxsb3dzIHRoZSBpbnNwZWN0b3IgdG8gcHJvY2VzcyBhIHBlbmRpbmcg
b3BlbiBjYWxsCi0gICAgLy8gYW5kIGNhbGwgY2xvc2UsIHJlZW50ZXJpbmcgSURCRGF0YWJhc2VC
YWNrZW5kOjpjbG9zZS4gVGhlbiB0aGUKLSAgICAvLyBiYWNrZW5kIHdvdWxkIGJlIHJlbW92ZWQg
Ym90aCBieSB0aGUgaW5zcGVjdG9yIGNsb3NpbmcgaXRzIGNvbm5lY3Rpb24sIGFuZAotICAgIC8v
IGJ5IHRoZSBjb25uZWN0aW9uIHRoYXQgZmlyc3QgY2FsbGVkIGNsb3NlLgotICAgIC8vIFRvIGF2
b2lkIHRoYXQgc2l0dWF0aW9uLCBkb24ndCBwcm9jZWVkIGluIGNhc2Ugb2YgcmVlbnRyYW5jeS4K
LSAgICBpZiAobV9jbG9zaW5nQ29ubmVjdGlvbikKLSAgICAgICAgcmV0dXJuOwotICAgIFRlbXBv
cmFyeUNoYW5nZTxib29sPiBjbG9zaW5nQ29ubmVjdGlvbihtX2Nsb3NpbmdDb25uZWN0aW9uLCB0
cnVlKTsKLSAgICBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci0KLSAgICAvLyBGSVhNRTogQWRkIGEg
dGVzdCBmb3IgdGhlIG1fcGVuZGluZ09wZW5DYWxscyBjYXNlcyBiZWxvdy4KLSAgICBpZiAoIWNv
bm5lY3Rpb25Db3VudCgpICYmICFtX3BlbmRpbmdPcGVuQ2FsbHMuc2l6ZSgpICYmICFtX3BlbmRp
bmdEZWxldGVDYWxscy5zaXplKCkpIHsKLSAgICAgICAgVHJhbnNhY3Rpb25NYXAgdHJhbnNhY3Rp
b25zKG1fdHJhbnNhY3Rpb25zKTsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVy
cm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtu
b3duRXJyb3IsICJDb25uZWN0aW9uIGlzIGNsb3NpbmcuIik7Ci0gICAgICAgIGZvciAoYXV0byYg
dHJhbnNhY3Rpb24gOiB0cmFuc2FjdGlvbnMudmFsdWVzKCkpCi0gICAgICAgICAgICB0cmFuc2Fj
dGlvbi0+YWJvcnQoZXJyb3IpOwotCi0gICAgICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5pc0Vt
cHR5KCkpOwotCi0gICAgICAgIG1fc2VydmVyQ29ubmVjdGlvbi0+Y2xvc2UoKTsKLQotICAgICAg
ICAvLyBUaGlzIGNoZWNrIHNob3VsZCBvbmx5IGJlIGZhbHNlIGluIHVuaXQgdGVzdHMuCi0gICAg
ICAgIEFTU0VSVChtX2ZhY3RvcnkpOwotICAgICAgICBpZiAobV9mYWN0b3J5KQotICAgICAgICAg
ICAgbV9mYWN0b3J5LT5yZW1vdmVJREJEYXRhYmFzZUJhY2tlbmQobV9pZGVudGlmaWVyKTsKLSAg
ICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0lEQkRhdGFiYXNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0lEQkRhdGFiYXNlQmFja2VuZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBjYWUwZDBmLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUJhY2tlbmQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDE3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJEYXRhYmFzZUJhY2tlbmRfaAotI2RlZmlu
ZSBJREJEYXRhYmFzZUJhY2tlbmRfaAotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3Mu
aCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZU1ldGFkYXRhLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFu
Z2UuaCIKLSNpbmNsdWRlICJJREJQZW5kaW5nRGVsZXRlQ2FsbC5oIgotI2luY2x1ZGUgIklEQlBl
bmRpbmdPcGVuQ2FsbC5oIgotCi0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hT
ZXQuaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIElEQkRhdGFiYXNlOwotY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2U7Ci1jbGFzcyBJREJLZXk7Ci1jbGFzcyBJREJLZXlQYXRoOwotY2xhc3MgSURCU2VydmVyQ29u
bmVjdGlvbjsKLWNsYXNzIElEQlRyYW5zYWN0aW9uQmFja2VuZDsKLWNsYXNzIElEQlRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I7Ci1jbGFzcyBTaGFyZWRCdWZmZXI7Ci0KLXN0cnVjdCBJREJEYXRhYmFz
ZU1ldGFkYXRhOwotc3RydWN0IElEQkluZGV4TWV0YWRhdGE7Ci1zdHJ1Y3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTsKLQotdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4+IEluZGV4S2V5czsK
LXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIElEQkRhdGFiYXNlQmFja2VuZCA6
IHB1YmxpYyBSZWZDb3VudGVkPElEQkRhdGFiYXNlQmFja2VuZD4gewotcHVibGljOgotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SURCRGF0YWJhc2VCYWNrZW5kPiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlKiwgSURCU2VydmVyQ29ubmVjdGlvbiYpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIH5JREJEYXRhYmFzZUJhY2tlbmQoKTsKLQotICAgIElEQlNlcnZlckNvbm5lY3Rpb24mIHNl
cnZlckNvbm5lY3Rpb24oKSB7IHJldHVybiBtX3NlcnZlckNvbm5lY3Rpb24uZ2V0KCk7IH0KLQot
ICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IEludmFsaWRJZCA9IDA7Ci0gICAgaW50NjRfdCBpZCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWV0YWRhdGEuaWQ7IH0KLSAgICB2b2lkIGFkZE9iamVjdFN0b3Jl
KGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBpbnQ2NF90IG5ld01heE9iamVjdFN0b3Jl
SWQpOwotICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlkKTsK
LSAgICB2b2lkIGFkZEluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSYsIGludDY0X3QgbmV3TWF4SW5kZXhJZCk7Ci0gICAgdm9pZCByZW1vdmVJbmRleChp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIG9wZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0
X3QgdmVyc2lvbik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBkZWxldGVEYXRhYmFzZShQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4pOwotCi0gICAgLy8gSURCRGF0YWJhc2VCYWNrZW5kCi0gICAg
dm9pZCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBh
dXRvSW5jcmVtZW50KTsKLSAgICB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgdHJhbnNh
Y3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2b2lkIGNyZWF0ZVRyYW5zYWN0
aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNr
cz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJh
bnNhY3Rpb25Nb2RlKTsKLSAgICB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+KTsKLQotICAgIHZvaWQgY29tbWl0KGludDY0X3QgdHJhbnNhY3Rpb25JZCk7Ci0gICAg
dm9pZCBhYm9ydChpbnQ2NF90IHRyYW5zYWN0aW9uSWQpOwotICAgIHZvaWQgYWJvcnQoaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKLQotICAgIHZv
aWQgY3JlYXRlSW5kZXgoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRo
JiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSk7Ci0gICAgdm9pZCBkZWxldGVJbmRleChp
bnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkKTsKLQotICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0K
LSAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKLSAg
ICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7Ci0gICAg
dm9pZCB0cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZChJREJUcmFuc2FjdGlvbkJh
Y2tlbmQqKTsKLSAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKElEQlRy
YW5zYWN0aW9uQmFja2VuZCopOwotCi0gICAgZW51bSBUYXNrVHlwZSB7Ci0gICAgICAgIE5vcm1h
bFRhc2sgPSAwLAotICAgICAgICBQcmVlbXB0aXZlVGFzawotICAgIH07Ci0KLSAgICBlbnVtIFB1
dE1vZGUgewotICAgICAgICBBZGRPclVwZGF0ZSwKLSAgICAgICAgQWRkT25seSwKLSAgICAgICAg
Q3Vyc29yVXBkYXRlCi0gICAgfTsKLQotICAgIHN0YXRpYyBjb25zdCBpbnQ2NF90IE1pbmltdW1J
bmRleElkID0gMzA7Ci0KLSAgICB2b2lkIGdldChpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdl
PiwgYm9vbCBrZXlPbmx5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHZvaWQgcHV0
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYpOwotICAgIHZvaWQgc2V0SW5kZXhLZXlzKGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleT4gcHJw
UHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3QsIDE+JiBpbmRleElkcywgY29uc3QgVmVj
dG9yPEluZGV4S2V5cywgMT4mKTsKLSAgICB2b2lkIHNldEluZGV4ZXNSZWFkeShpbnQ2NF90IHRy
YW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgVmVjdG9yPGludDY0X3Qs
IDE+JiBpbmRleElkcyk7Ci0gICAgdm9pZCBvcGVuQ3Vyc29yKGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURC
S2V5UmFuZ2U+LCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgYm9vbCBrZXlPbmx5LCBUYXNr
VHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2b2lkIGNvdW50KGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHZv
aWQgZGVsZXRlUmFuZ2UoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwot
ICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLQotICAgIGNvbnN0IElE
QkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9tZXRhZGF0YTsg
fQotICAgIHZvaWQgc2V0Q3VycmVudFZlcnNpb24odWludDY0X3QgdmVyc2lvbikgeyBtX21ldGFk
YXRhLnZlcnNpb24gPSB2ZXJzaW9uOyB9Ci0KLSAgICBib29sIGhhc1BlbmRpbmdTZWNvbmRIYWxm
T3BlbigpIHsgcmV0dXJuIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuLmdldCgpOyB9Ci0gICAgdm9p
ZCBzZXRQZW5kaW5nU2Vjb25kSGFsZk9wZW4oc3RkOjp1bmlxdWVfcHRyPElEQlBlbmRpbmdPcGVu
Q2FsbD4gcGVuZGluZ09wZW5DYWxsKSB7IG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuID0gV1RGTW92
ZShwZW5kaW5nT3BlbkNhbGwpOyB9Ci0KLSAgICBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSYg
ZmFjdG9yeUJhY2tlbmQoKSB7IHJldHVybiAqbV9mYWN0b3J5OyB9Ci0KLSAgICBjbGFzcyBWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uOwotICAgIGNsYXNzIFZlcnNpb25DaGFuZ2VBYm9ydE9wZXJhdGlv
bjsKLQotcHJpdmF0ZToKLSAgICBJREJEYXRhYmFzZUJhY2tlbmQoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlKiwgSURCU2VydmVyQ29ubmVjdGlvbiYpOwotCi0gICAgdm9pZCBvcGVuQ29ubmVjdGlvbklu
dGVybmFsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVyc2lvbik7Ci0KLSAg
ICB2b2lkIG9wZW5JbnRlcm5hbEFzeW5jKCk7Ci0gICAgdm9pZCBkaWRPcGVuSW50ZXJuYWxBc3lu
Yyhjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiwgYm9vbCBzdWNjZXNzKTsKLQotICAgIHZvaWQg
cnVuSW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwg
aW50NjRfdCByZXF1ZXN0ZWRWZXJzaW9uKTsKLSAgICBzaXplX3QgY29ubmVjdGlvbkNvdW50KCk7
Ci0gICAgdm9pZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7Ci0gICAgdm9pZCBwcm9jZXNzUGVuZGlu
Z09wZW5DYWxscyhib29sIHN1Y2Nlc3MpOwotCi0gICAgYm9vbCBpc0RlbGV0ZURhdGFiYXNlQmxv
Y2tlZCgpOwotICAgIHZvaWQgZGVsZXRlRGF0YWJhc2VBc3luYyhQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4pOwotCi0gICAgSURCRGF0YWJhc2VNZXRhZGF0YSBtX21ldGFkYXRhOwotCi0gICAgU3Ry
aW5nIG1faWRlbnRpZmllcjsKLQotICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZT4gbV9mYWN0b3J5OwotICAgIFJlZjxJREJTZXJ2ZXJDb25uZWN0aW9uPiBtX3NlcnZlckNvbm5l
Y3Rpb247Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcj4g
bV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmQ+IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbjsKLQotICAgIHR5cGVkZWYgSGFz
aE1hcDxpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmQqPiBUcmFuc2FjdGlvbk1hcDsKLSAg
ICBUcmFuc2FjdGlvbk1hcCBtX3RyYW5zYWN0aW9uczsKLQotICAgIERlcXVlPHN0ZDo6dW5pcXVl
X3B0cjxJREJQZW5kaW5nT3BlbkNhbGw+PiBtX3BlbmRpbmdPcGVuQ2FsbHM7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPElEQlBlbmRpbmdPcGVuQ2FsbD4gbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW47Ci0K
LSAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8SURCUGVuZGluZ0RlbGV0ZUNhbGw+PiBtX3BlbmRp
bmdEZWxldGVDYWxsczsKLSAgICBIYXNoU2V0PFJlZlB0cjxJREJDYWxsYmFja3M+PiBtX2RlbGV0
ZUNhbGxiYWNrc1dhaXRpbmdDb21wbGV0aW9uOwotCi0gICAgdHlwZWRlZiBMaXN0SGFzaFNldDxS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+PiBEYXRhYmFzZUNhbGxiYWNrc1NldDsKLSAgICBE
YXRhYmFzZUNhbGxiYWNrc1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0OwotCi0gICAgYm9vbCBt
X2Nsb3NpbmdDb25uZWN0aW9uOwotICAgIGJvb2wgbV9kaWRPcGVuSW50ZXJuYWw7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLQotI2VuZGlmIC8vIElEQkRhdGFiYXNlQmFja2VuZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VDYWxsYmFja3MuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxi
YWNrcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWMwZWE1Li4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUNh
bGxiYWNrcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
SURCRGF0YWJhc2VDYWxsYmFja3NfaAotI2RlZmluZSBJREJEYXRhYmFzZUNhbGxiYWNrc19oCi0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJy
b3IuaCIKLSNpbmNsdWRlICJJbmRleGVkREIuaCIKLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIExlZ2FjeURhdGFiYXNlOwotCi1jbGFzcyBJREJEYXRhYmFzZUNhbGxiYWNrcyA6
IHB1YmxpYyBSZWZDb3VudGVkPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiB7Ci1wdWJsaWM6Ci0gICAg
dmlydHVhbCB+SURCRGF0YWJhc2VDYWxsYmFja3MoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBv
bkZvcmNlZENsb3NlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UodWlu
dDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikgPSAwOwotCi0gICAgdmlydHVh
bCB2b2lkIG9uQWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIG9uQ29tcGxldGUoaW50NjRfdCB0cmFu
c2FjdGlvbklkKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdChMZWdhY3lEYXRhYmFz
ZSopID0gMDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRp
ZiAvLyBJREJEYXRhYmFzZUNhbGxiYWNrc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxiYWNr
c0ltcGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjNkZGViLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFz
ZUNhbGxiYWNrc0ltcGwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwu
aCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiTGVnYWN5RGF0
YWJhc2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8SURCRGF0YWJhc2VDYWxsYmFj
a3NJbXBsPiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsKCkpOwotfQotCi1JREJEYXRh
YmFzZUNhbGxiYWNrc0ltcGw6OklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpCi0gICAgOiBtX2Rh
dGFiYXNlKG51bGxwdHIpCi17Ci19Ci0KLUlEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6fklEQkRh
dGFiYXNlQ2FsbGJhY2tzSW1wbCgpCi17Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsOjpvbkZvcmNlZENsb3NlKCkKLXsKLSAgICBpZiAobV9kYXRhYmFzZSkKLSAgICAgICAgbV9k
YXRhYmFzZS0+Zm9yY2VDbG9zZSgpOwotfQotCi12b2lkIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1w
bDo6b25WZXJzaW9uQ2hhbmdlKHVpbnQ2NF90IG9sZFZlcnNpb24sIHVpbnQ2NF90IG5ld1ZlcnNp
b24pCi17Ci0gICAgaWYgKG1fZGF0YWJhc2UpCi0gICAgICAgIG1fZGF0YWJhc2UtPm9uVmVyc2lv
bkNoYW5nZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uKTsKLX0KLQotdm9pZCBJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGw6OmNvbm5lY3QoTGVnYWN5RGF0YWJhc2UqIGRhdGFiYXNlKQotewotICAgIEFT
U0VSVCghbV9kYXRhYmFzZSk7Ci0gICAgQVNTRVJUKGRhdGFiYXNlKTsKLSAgICBtX2RhdGFiYXNl
ID0gZGF0YWJhc2U7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsOjpvbkFib3J0
KGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
cikKLXsKLSAgICBpZiAobV9kYXRhYmFzZSkKLSAgICAgICAgbV9kYXRhYmFzZS0+b25BYm9ydCh0
cmFuc2FjdGlvbklkLCBlcnJvcik7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VDYWxsYmFja3NJbXBs
OjpvbkNvbXBsZXRlKGludDY0X3QgdHJhbnNhY3Rpb25JZCkKLXsKLSAgICBpZiAobV9kYXRhYmFz
ZSkKLSAgICAgICAgbV9kYXRhYmFzZS0+b25Db21wbGV0ZSh0cmFuc2FjdGlvbklkKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJEYXRhYmFzZUNhbGxi
YWNrc0ltcGwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQzYjBjYi4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCRGF0YWJh
c2VDYWxsYmFja3NJbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmbmRlZiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGxfaAotI2RlZmluZSBJREJEYXRhYmFzZUNh
bGxiYWNrc0ltcGxfaAotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgTGVnYWN5RGF0YWJhc2U7Ci0KLWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCBm
aW5hbCA6IHB1YmxpYyBJREJEYXRhYmFzZUNhbGxiYWNrcyB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFJlZjxJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGw+IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfklE
QkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpIG92ZXJyaWRlOwotCi0gICAgLy8gSURCRGF0YWJhc2VD
YWxsYmFja3MKLSAgICB2aXJ0dWFsIHZvaWQgb25Gb3JjZWRDbG9zZSgpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2UodWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0
X3QgbmV3VmVyc2lvbikgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgb25BYm9ydChpbnQ2
NF90IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBvbkNvbXBsZXRlKGludDY0X3QgdHJhbnNhY3Rpb25JZCkgb3Zl
cnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdChMZWdhY3lEYXRhYmFzZSopIG92ZXJy
aWRlOwotCi1wcml2YXRlOgotICAgIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbCgpOwotCi0gICAg
Ly8gVGhlIGluaXRpYWwgSURCT3BlbkRCUmVxdWVzdCBvciBmaW5hbCBJREJEYXRhYmFzZSBtYWlu
dGFpbnMgYSBSZWZQdHIgdG8gdGhpcwotICAgIExlZ2FjeURhdGFiYXNlKiBtX2RhdGFiYXNlOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKLQotI2VuZGlmIC8vIElEQkRh
dGFiYXNlQ2FsbGJhY2tzSW1wbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjk5MDE5Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2VfaAotI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZV9oCi0KLSNp
bmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmQuaCIKLSNpbmNsdWRlICJJbmRleGVkREIuaCIKLQot
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQkNhbGxiYWNrczsKLWNs
YXNzIElEQkN1cnNvckJhY2tlbmQ7Ci1jbGFzcyBJREJEYXRhYmFzZTsKLWNsYXNzIElEQkRhdGFi
YXNlQmFja2VuZDsKLWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOwotY2xhc3MgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kOwotY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi0vLyBUaGlzIGNsYXNz
IGlzIHNoYXJlZCBieSBJREJGYWN0b3J5IChhc3luYykgYW5kIElEQkZhY3RvcnlTeW5jIChzeW5j
KS4KLS8vIFRoaXMgaXMgaW1wbGVtZW50ZWQgYnkgSURCRmFjdG9yeUJhY2tlbmRJbXBsIGFuZCBv
cHRpb25hbGx5IG90aGVycyAoaW4gb3JkZXIgdG8gcHJveHkKLS8vIGNhbGxzIGFjcm9zcyBwcm9j
ZXNzIGJhcnJpZXJzKS4gQWxsIGNhbGxzIHRvIHRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIG5vbi1i
bG9ja2luZyBhbmQKLS8vIHRyaWdnZXIgd29yayBvbiBhIGJhY2tncm91bmQgdGhyZWFkIGlmIG5l
Y2Vzc2FyeS4KLWNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIDogcHVibGljIFJlZkNv
dW50ZWQ8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFs
IH5JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSgpIHsgfQotCi0gICAgdmlydHVhbCB2b2lkIGdl
dERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBTZWN1cml0eU9y
aWdpbiYgb3BlbmluZ09yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG1haW5GcmFtZU9yaWdp
biwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihj
b25zdCBTdHJpbmcmIG5hbWUsIHVpbnQ2NF90IHZlcnNpb24sIGludDY0X3QgdHJhbnNhY3Rpb25J
ZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9wZW5pbmdPcmlnaW4sIGNvbnN0IFNlY3VyaXR5
T3JpZ2luJiBtYWluRnJhbWVPcmlnaW4pID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3BlbmluZ09y
aWdpbiwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG1haW5GcmFtZU9yaWdpbiwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KikgPSAwOwotCi0gICAgdmlydHVh
bCB2b2lkIHJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50
aWZpZXIpID0gMDsKLQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2VfaAotCi0jZW5kaWYgLy8gSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0lEQlBlbmRpbmdEZWxldGVDYWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGluZ0RlbGV0ZUNhbGwuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNGZiYTJlMS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCUGVuZGluZ0RlbGV0ZUNhbGwuaAorKysgL2Rldi9udWxs
CkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIElEQlBlbmRpbmdEZWxldGVD
YWxsX2gKLSNkZWZpbmUgSURCUGVuZGluZ0RlbGV0ZUNhbGxfaAotCi0jaW5jbHVkZSAiSURCQ2Fs
bGJhY2tzLmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCUGVuZGluZ0RlbGV0
ZUNhbGwgewotcHVibGljOgotICAgIGV4cGxpY2l0IElEQlBlbmRpbmdEZWxldGVDYWxsKFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV9jYWxsYmFja3MoY2Fs
bGJhY2tzKQotICAgIHsKLSAgICB9Ci0KLSAgICBJREJDYWxsYmFja3MqIGNhbGxiYWNrcygpIHsg
cmV0dXJuIG1fY2FsbGJhY2tzLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNlbmRpZiAvLyBJREJQZW5kaW5nRGVs
ZXRlQ2FsbF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZWdhY3kvSURCUGVuZGluZ09wZW5DYWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvSURCUGVuZGluZ09wZW5DYWxsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDliNTNlZjkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdPcGVuQ2FsbC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCUGVuZGluZ09wZW5DYWxsX2gKLSNkZWZp
bmUgSURCUGVuZGluZ09wZW5DYWxsX2gKLQotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IElEQkNhbGxiYWNrczsKLWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOwotCi1jbGFzcyBJREJQ
ZW5kaW5nT3BlbkNhbGwgewotcHVibGljOgotICAgIElEQlBlbmRpbmdPcGVuQ2FsbChJREJDYWxs
YmFja3MmIGNhbGxiYWNrcywgSURCRGF0YWJhc2VDYWxsYmFja3MmIGRhdGFiYXNlQ2FsbGJhY2tz
LCBpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIHVpbnQ2NF90IHZlcnNpb24pCi0gICAgICAgIDogbV9j
YWxsYmFja3MoJmNhbGxiYWNrcykKLSAgICAgICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tzKCZkYXRh
YmFzZUNhbGxiYWNrcykKLSAgICAgICAgLCBtX3ZlcnNpb24odmVyc2lvbikKLSAgICAgICAgLCBt
X3RyYW5zYWN0aW9uSWQodHJhbnNhY3Rpb25JZCkKLSAgICB7Ci0gICAgfQotCi0gICAgSURCQ2Fs
bGJhY2tzKiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrcy5nZXQoKTsgfQotICAgIElE
QkRhdGFiYXNlQ2FsbGJhY2tzKiBkYXRhYmFzZUNhbGxiYWNrcygpIHsgcmV0dXJuIG1fZGF0YWJh
c2VDYWxsYmFja3MuZ2V0KCk7IH0KLSAgICB1aW50NjRfdCB2ZXJzaW9uKCkgeyByZXR1cm4gbV92
ZXJzaW9uOyB9Ci0gICAgaW50NjRfdCB0cmFuc2FjdGlvbklkKCkgY29uc3QgeyByZXR1cm4gbV90
cmFuc2FjdGlvbklkOyB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2Fs
bGJhY2tzOwotICAgIHVpbnQ2NF90IG1fdmVyc2lvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fdHJh
bnNhY3Rpb25JZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQlBlbmRpbmdPcGVuQ2FsbF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCUGVu
ZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGU5ZDY2MDEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgiCi0KLSNpbmNsdWRl
ICJMZWdhY3lUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTcGVjaWZpYy5oPgotCi11c2luZyBXVEY6OlRocmVhZFNwZWNpZmljOwotCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdHlwZWRlZiBW
ZWN0b3I8UmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPj4gVHJhbnNhY3Rpb25MaXN0OwotCi1zdGF0
aWMgVGhyZWFkU3BlY2lmaWM8VHJhbnNhY3Rpb25MaXN0PiYgdHJhbnNhY3Rpb25zKCkKLXsKLSAg
ICAvLyBGSVhNRTogTW92ZSB0aGUgVmVjdG9yIHRvIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgdG8g
YXZvaWQgZGVhbGluZyB3aXRoCi0gICAgLy8gdGhyZWFkLWxvY2FsIHN0b3JhZ2UuCi0gICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0YXRpYyBUaHJlYWRTcGVjaWZpYzxU
cmFuc2FjdGlvbkxpc3Q+KiB0cmFuc2FjdGlvbnM7Ci0gICAgc3RkOjpjYWxsX29uY2Uob25jZUZs
YWcsIFtdIHsKLSAgICAgICAgdHJhbnNhY3Rpb25zID0gbmV3IFRocmVhZFNwZWNpZmljPFRyYW5z
YWN0aW9uTGlzdD47Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gKnRyYW5zYWN0aW9uczsKLX0KLQot
dm9pZCBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjphZGROZXdUcmFuc2FjdGlvbihQYXNz
UmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbikKLXsKLSAgICB0cmFuc2FjdGlv
bnMoKS0+YXBwZW5kKHRyYW5zYWN0aW9uKTsKLX0KLQotdm9pZCBJREJQZW5kaW5nVHJhbnNhY3Rp
b25Nb25pdG9yOjpkZWFjdGl2YXRlTmV3VHJhbnNhY3Rpb25zKCkKLXsKLSAgICBUaHJlYWRTcGVj
aWZpYzxUcmFuc2FjdGlvbkxpc3Q+JiBsaXN0ID0gdHJhbnNhY3Rpb25zKCk7Ci0gICAgZm9yIChh
dXRvJiB0cmFuc2FjdGlvbiA6ICpsaXN0KQotICAgICAgICB0cmFuc2FjdGlvbi0+c2V0QWN0aXZl
KGZhbHNlKTsKLSAgICAvLyBGSVhNRTogRXhlcmNpc2UgdGhpcyBjYWxsIHRvIGNsZWFyKCkgaW4g
YSBsYXlvdXQgdGVzdC4KLSAgICBsaXN0LT5jbGVhcigpOwotfQotCi19OwotI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJQZW5kaW5nVHJhbnNhY3Rpb25N
b25pdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZmUyNzMuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlBlbmRpbmdU
cmFuc2FjdGlvbk1vbml0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3JfaAotI2RlZmluZSBJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIExlZ2FjeVRyYW5zYWN0aW9uOwotCi0vLyBU
aGlzIGNsYXNzIGtlZXBzIHRyYWNrIG9mIHRoZSB0cmFuc2FjdGlvbnMgY3JlYXRlZCBkdXJpbmcg
dGhlIGN1cnJlbnQKLS8vIEphdmFzY3JpcHQgZXhlY3V0aW9uIGNvbnRleHQuIFRyYW5zYWN0aW9u
cyBoYXZlIGFuIGludGVybmFsIHxhY3RpdmV8IGZsYWcKLS8vIHdoaWNoIGlzIHNldCB0byB0cnVl
IG9uIGNyZWF0aW9uLCBidXQgbXVzdCBiZSBzZXQgdG8gZmFsc2Ugd2hlbiBjb250cm9sCi0vLyBy
ZXR1cm5zIHRvIHRoZSBldmVudCBsb29wLgotCi1jbGFzcyBJREJQZW5kaW5nVHJhbnNhY3Rpb25N
b25pdG9yIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJREJQZW5kaW5nVHJhbnNhY3Rpb25N
b25pdG9yKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhZGROZXdUcmFuc2FjdGlvbihQYXNz
UmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPik7Ci0gICAgc3RhdGljIHZvaWQgZGVhY3RpdmF0ZU5l
d1RyYW5zYWN0aW9ucygpOwotCi1wcml2YXRlOgotICAgIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1v
bml0b3IoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9u
aXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3OWJhODdjLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMzc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLQotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFz
ZUJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgotI2luY2x1ZGUg
IklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQlNlcnZlckNv
bm5lY3Rpb24uaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmgi
Ci0jaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgotI2luY2x1ZGUgIkxvZ2dp
bmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8SURCVHJhbnNhY3Rpb25CYWNrZW5k
PiBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmNyZWF0ZShJREJEYXRhYmFzZUJhY2tlbmQqIGRhdGFi
YXNlQmFja2VuZCwgaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVk
REI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQotewotICAgIEhhc2hTZXQ8aW50NjRfdD4gb2JqZWN0
U3RvcmVIYXNoU2V0OwotICAgIGZvciAoYXV0byYgaWQgOiBvYmplY3RTdG9yZUlkcykKLSAgICAg
ICAgb2JqZWN0U3RvcmVIYXNoU2V0LmFkZChpZCk7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJREJUcmFuc2FjdGlvbkJhY2tlbmQoZGF0YWJhc2VCYWNrZW5kLCBpZCwgY2FsbGJhY2tzLCBv
YmplY3RTdG9yZUhhc2hTZXQsIG1vZGUpKTsKLX0KLQotSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZUJhY2tlbmQs
IGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywg
Y29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25Nb2RlIG1vZGUpCi0gICAgOiBtX29iamVjdFN0b3JlSWRzKG9iamVjdFN0b3JlSWRzKQot
ICAgICwgbV9tb2RlKG1vZGUpCi0gICAgLCBtX3N0YXRlKFVub3BlbmVkKQotICAgICwgbV9jb21t
aXRQZW5kaW5nKGZhbHNlKQotICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICwgbV9k
YXRhYmFzZShkYXRhYmFzZUJhY2tlbmQpCi0gICAgLCBtX3Rhc2tUaW1lcigqdGhpcywgJklEQlRy
YW5zYWN0aW9uQmFja2VuZDo6dGFza1RpbWVyRmlyZWQpCi0gICAgLCBtX3BlbmRpbmdQcmVlbXB0
aXZlRXZlbnRzKDApCi0gICAgLCBtX2lkKGlkKQotewotICAgIC8vIFdlIHBhc3MgYSByZWZlcmVu
Y2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgotICAgIHJlbGF4QWRv
cHRpb25SZXF1aXJlbWVudCgpOwotCi0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGlu
YXRvcigpLT5kaWRDcmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKLQotICAgIFJlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmQ+IGJhY2tlbmQodGhpcyk7Ci0gICAgbV9kYXRhYmFzZS0+c2VydmVyQ29u
bmVjdGlvbigpLm9wZW5UcmFuc2FjdGlvbihpZCwgb2JqZWN0U3RvcmVJZHMsIG1vZGUsIFtiYWNr
ZW5kXShib29sIHN1Y2Nlc3MpIHsKLSAgICAgICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFtiYWNrZW5kXSgpIHsKLSAgICAgICAgICAgICAgICBiYWNrZW5k
LT5hYm9ydCgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIHRyYW5zYWN0aW9uIHdh
cyBhYm9ydGVkIGJlZm9yZSB0aGUgc2VydmVyIGNvbm5lY3Rpb24gZmluaXNoZWQgb3BlbmluZyB0
aGUgdHJhbnNhY3Rpb24uCi0gICAgICAgIGlmIChiYWNrZW5kLT5tX3N0YXRlID09IEZpbmlzaGVk
KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGJhY2tlbmQtPm1fc3RhdGUgPSBVbnVz
ZWQ7Ci0gICAgICAgIGlmIChiYWNrZW5kLT5oYXNQZW5kaW5nVGFza3MoKSkKLSAgICAgICAgICAg
IGJhY2tlbmQtPnN0YXJ0KCk7Ci0gICAgfSk7Ci19Ci0KLUlEQlRyYW5zYWN0aW9uQmFja2VuZDo6
fklEQlRyYW5zYWN0aW9uQmFja2VuZCgpCi17Ci0gICAgLy8gSXQgc2hvdWxkbid0IGJlIHBvc3Np
YmxlIGZvciB0aGlzIG9iamVjdCB0byBnZXQgZGVsZXRlZCB1bmxlc3MgaXQncyB1bnVzZWQsIGNv
bXBsZXRlLCBvciBhYm9ydGVkLgotICAgIEFTU0VSVChtX3N0YXRlID09IEZpbmlzaGVkIHx8IG1f
c3RhdGUgPT0gVW51c2VkKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVk
dWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SURC
T3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVmUHRyPElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBhYm9y
dFRhc2spCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmICh0eXBlID09IElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaykKLSAgICAg
ICAgbV90YXNrUXVldWUuYXBwZW5kKHRhc2spOwotICAgIGVsc2UKLSAgICAgICAgbV9wcmVlbXB0
aXZlVGFza1F1ZXVlLmFwcGVuZCh0YXNrKTsKLQotICAgIGlmIChhYm9ydFRhc2spCi0gICAgICAg
IG1fYWJvcnRUYXNrUXVldWUucHJlcGVuZChhYm9ydFRhc2spOwotCi0gICAgaWYgKG1fc3RhdGUg
PT0gVW5vcGVuZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3N0YXRlID09IFVudXNl
ZCkKLSAgICAgICAgc3RhcnQoKTsKLSAgICBlbHNlIGlmIChtX3N0YXRlID09IFJ1bm5pbmcgJiYg
IW1fdGFza1RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdGFza1RpbWVyLnN0YXJ0T25lU2hv
dCgwKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0KCkKLXsKLSAgICBh
Ym9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25v
d25FcnJvciwgIkludGVybmFsIGVycm9yICh1bmtub3duIGNhdXNlKSIpKTsKLX0KLQotdm9pZCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4g
ZXJyb3IpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIGlmIChlcnJvcikKLSAgICAgICAgTE9HKFN0
b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0IC0gKCVzKSAlcyIsIGVycm9y
LT5uYW1lKCkudXRmOCgpLmRhdGEoKSwgZXJyb3ItPm1lc3NhZ2UoKS51dGY4KCkuZGF0YSgpKTsK
LSAgICBlbHNlCi0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiSURCVHJhbnNhY3Rpb25CYWNrZW5k
OjphYm9ydCAobm8gZXJyb3IpIik7Ci0jZW5kaWYKLQotICAgIGlmIChtX3N0YXRlID09IEZpbmlz
aGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIHdhc1J1bm5pbmcgPSBtX3N0YXRlID09
IFJ1bm5pbmc7Ci0KLSAgICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5
IGJlIHJlbGVhc2VkIHdoaWxlIHBlcmZvcm1pbmcgdGhlCi0gICAgLy8gYWJvcnQgc3RlcHMgYmVs
b3cuIFdlIHRoZXJlZm9yZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMK
LSAgICAvLyBhbGl2ZSB3aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRob2QuCi0gICAgUmVmPElEQlRy
YW5zYWN0aW9uQmFja2VuZD4gcHJvdGVjdCgqdGhpcyk7Ci0KLSAgICBtX3N0YXRlID0gRmluaXNo
ZWQ7Ci0gICAgbV90YXNrVGltZXIuc3RvcCgpOwotCi0gICAgaWYgKHdhc1J1bm5pbmcpCi0gICAg
ICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5yb2xsYmFja1RyYW5zYWN0aW9uU3lu
YyhtX2lkKTsKLQotICAgIC8vIFJ1biB0aGUgYWJvcnQgdGFza3MsIGlmIGFueS4KLSAgICB3aGls
ZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxJREJTeW5j
aHJvbm91c09wZXJhdGlvbj4gdGFzayhtX2Fib3J0VGFza1F1ZXVlLnRha2VGaXJzdCgpKTsKLSAg
ICAgICAgdGFzay0+cGVyZm9ybSgpOwotICAgIH0KLQotICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVz
b3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQg
Y2FsbGJhY2tzCi0gICAgLy8gYXJlIGZpcmVkLCBhcyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkg
cmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxvdyB0aGUgYmFja2luZyBzdG9yZQotICAgIC8vIGl0
c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNyaXRpY2FsLgotICAgIGNsb3NlT3Bl
bkN1cnNvcnMoKTsKLQotICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5yZXNldFRy
YW5zYWN0aW9uU3luYyhtX2lkKTsKLQotICAgIC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUg
bWFya2VkIGFzIGNvbXBsZXRlZCBiZWZvcmUgdGhlIGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMK
LSAgICAvLyB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxp
a2UgY2xvc2luZyBjb25uZWN0aW9ucy4KLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOwotICAgIEFTU0VSVCghbV9kYXRh
YmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5pc0FjdGl2ZSh0aGlzKSk7Ci0gICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsKLQotICAgIFJlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmQ+IGRhdGFiYXNlID0gbV9kYXRhYmFzZS5yZWxlYXNlKCk7Ci0KLSAgICBpZiAo
bV9jYWxsYmFja3MpCi0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KGlkKCksIGVycm9yKTsK
LQotICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsK
LX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmlzVGFza1F1ZXVlRW1wdHkoKSBjb25z
dAotewotICAgIHJldHVybiBtX3ByZWVtcHRpdmVUYXNrUXVldWUuaXNFbXB0eSgpICYmIG1fdGFz
a1F1ZXVlLmlzRW1wdHkoKTsKLX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6Omhhc1Bl
bmRpbmdUYXNrcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVu
dHMgfHwgIWlzVGFza1F1ZXVlRW1wdHkoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OnJlZ2lzdGVyT3BlbkN1cnNvcihJREJDdXJzb3JCYWNrZW5kKiBjdXJzb3IpCi17Ci0gICAg
bV9vcGVuQ3Vyc29ycy5hZGQoY3Vyc29yKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OnVucmVnaXN0ZXJPcGVuQ3Vyc29yKElEQkN1cnNvckJhY2tlbmQqIGN1cnNvcikKLXsKLSAg
ICBtX29wZW5DdXJzb3JzLnJlbW92ZShjdXJzb3IpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZDo6cnVuKCkKLXsKLSAgICAvLyBUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIGhhcyBzdGFy
dGVkIHRoaXMgdHJhbnNhY3Rpb24uIFNjaGVkdWxlIGEgdGltZXIKLSAgICAvLyB0byBwcm9jZXNz
IHRoZSBmaXJzdCB0YXNrLgotICAgIEFTU0VSVChtX3N0YXRlID09IFN0YXJ0UGVuZGluZyB8fCBt
X3N0YXRlID09IFJ1bm5pbmcpOwotICAgIEFTU0VSVCghbV90YXNrVGltZXIuaXNBY3RpdmUoKSk7
Ci0KLSAgICBtX3Rhc2tUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kOjpzdGFydCgpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0gVW51c2VkKTsK
LQotICAgIG1fc3RhdGUgPSBTdGFydFBlbmRpbmc7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rp
b25Db29yZGluYXRvcigpLT5kaWRTdGFydFRyYW5zYWN0aW9uKHRoaXMpOwotICAgIG1fZGF0YWJh
c2UtPnRyYW5zYWN0aW9uU3RhcnRlZCh0aGlzKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OmNvbW1pdCgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OmNvbW1pdCB0cmFuc2FjdGlvbiAlbGxpIGluIHN0YXRlICV1Iiwgc3RhdGljX2Nhc3Q8
bG9uZyBsb25nPihtX2lkKSwgbV9zdGF0ZSk7Ci0KLSAgICAvLyBJbiBtdWx0aXByb2Nlc3MgcG9y
dHMsIGZyb250LWVuZCBtYXkgaGF2ZSByZXF1ZXN0ZWQgYSBjb21taXQgYnV0IGFuIGFib3J0IGhh
cyBhbHJlYWR5Ci0gICAgLy8gYmVlbiBpbml0aWF0ZWQgYXN5bmNocm9ub3VzbHkgYnkgdGhlIGJh
Y2stZW5kLgotICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBBU1NFUlQobV9zdGF0ZSA9PSBVbm9wZW5lZCB8fCBtX3N0YXRlID09IFVudXNlZCB8fCBt
X3N0YXRlID09IFJ1bm5pbmcpOwotICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7Ci0KLSAgICAv
LyBGcm9udC1lbmQgaGFzIHJlcXVlc3RlZCBhIGNvbW1pdCwgYnV0IHRoZXJlIG1heSBiZSB0YXNr
cyBsaWtlIGNyZWF0ZUluZGV4IHdoaWNoCi0gICAgLy8gYXJlIGNvbnNpZGVyZWQgc3luY2hyb25v
dXMgYnkgdGhlIGZyb250LWVuZCBidXQgYXJlIHByb2Nlc3NlZCBhc3luY2hyb25vdXNseS4KLSAg
ICBpZiAoaGFzUGVuZGluZ1Rhc2tzKCkpIHsKLSAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJU
cmFuc2FjdGlvbkJhY2tlbmQ6OmNvbW1pdCAtIE5vdCBjb21taXR0aW5nIG5vdywgdHJhbnNhY3Rp
b24gc3RpbGwgaGFzIHBlbmRpbmcgdGFza3MgKFRyYW5zYWN0aW9uICVsbGkpIiwgc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPihtX2lkKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBU
aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdoaWxlIHBl
cmZvcm1pbmcgdGhlCi0gICAgLy8gY29tbWl0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZvcmUgdGFr
ZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCi0gICAgLy8gYWxpdmUgd2hpbGUg
ZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+
IGJhY2tlbmQodGhpcyk7Ci0KLSAgICBib29sIHVudXNlZCA9IG1fc3RhdGUgPT0gVW51c2VkIHx8
IG1fc3RhdGUgPT0gVW5vcGVuZWQ7Ci0gICAgbV9zdGF0ZSA9IEZpbmlzaGVkOwotCi0gICAgYm9v
bCBjb21taXR0ZWQgPSB1bnVzZWQ7Ci0KLSAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9u
KCkuY29tbWl0VHJhbnNhY3Rpb24obV9pZCwgW2JhY2tlbmQsIHRoaXMsIGNvbW1pdHRlZCwgdW51
c2VkXShib29sIHN1Y2Nlc3MpIG11dGFibGUgewotICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIGNv
bW1pdFRyYW5zYWN0aW9uIHJlcXVlc3QgYWJvcnRpbmcgZHVyaW5nIG9yIGFmdGVyIHN5bmNocm9u
b3VzIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6YWJvcnQoKSBjYWxsLgotICAgICAgICAvLyBUaGlz
IGNhbiBlYXNpbHkgaGFwcGVuIGlmIHRoZSBwYWdlIGlzIG5hdmlnYXRlZCBiZWZvcmUgYWxsIHRy
YW5zYWN0aW9ucyBmaW5pc2guCi0gICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBoYXZlIG5vIGZ1
cnRoZXIgY2xlYW51cCBhbmQgZG9uJ3QgbmVlZCB0byBtYWtlIGFueSBjYWxsYmFja3MuCi0gICAg
ICAgIGlmICghbV9kYXRhYmFzZSkgewotICAgICAgICAgICAgQVNTRVJUKCFzdWNjZXNzKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbW1pdHRlZCB8PSBzdWNj
ZXNzOwotCi0gICAgICAgIC8vIEJhY2tpbmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJz
b3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJlZm9yZSBzY3JpcHQgY2FsbGJhY2tzCi0gICAgICAgIC8v
IGFyZSBmaXJlZCwgYXMgdGhlIHNjcmlwdCBjYWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNl
cyBhbmQgYWxsb3cgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICAgICAgLy8gaXRzZWxmIHRvIGJlIHJl
bGVhc2VkLCBhbmQgb3JkZXIgaXMgY3JpdGljYWwuCi0gICAgICAgIGNsb3NlT3BlbkN1cnNvcnMo
KTsKLQotICAgICAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkucmVzZXRUcmFuc2Fj
dGlvbihtX2lkLCBbXSgpIHsgfSk7Ci0KLSAgICAgICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxz
byBiZSBtYXJrZWQgYXMgY29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVk
LCBhcwotICAgICAgICAvLyB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVy
YXRpb25zIGxpa2UgY2xvc2luZyBjb25uZWN0aW9ucy4KLSAgICAgICAgaWYgKCF1bnVzZWQpCi0g
ICAgICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlz
aFRyYW5zYWN0aW9uKHRoaXMpOwotICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlz
aGVkKHRoaXMpOwotCi0gICAgICAgIGlmIChjb21taXR0ZWQpIHsKLSAgICAgICAgICAgIG1fY2Fs
bGJhY2tzLT5vbkNvbXBsZXRlKGlkKCkpOwotICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNh
Y3Rpb25GaW5pc2hlZEFuZENvbXBsZXRlRmlyZWQodGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydChpZCgpLCBJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
IGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24uIikpOwotICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJh
bnNhY3Rpb25GaW5pc2hlZEFuZEFib3J0RmlyZWQodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtX2RhdGFiYXNlID0gbnVsbHB0cjsKLSAgICB9KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlv
bkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVkKCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIklEQlRy
YW5zYWN0aW9uQmFja2VuZDo6dGFza1RpbWVyRmlyZWQiKTsKLQotICAgIGlmIChtX3N0YXRlID09
IFN0YXJ0UGVuZGluZykgewotICAgICAgICBtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCku
YmVnaW5UcmFuc2FjdGlvbihtX2lkLCBbXSgpIHsgfSk7Ci0gICAgICAgIG1fc3RhdGUgPSBSdW5u
aW5nOwotICAgIH0KLQotICAgIC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBt
YXkgYmUgcmVsZWFzZWQgd2hpbGUgcGVyZm9ybWluZyBhIHRhc2suCi0gICAgLy8gVGFrZSBhIHNl
bGYgcmVmZXJlbmNlIHRvIGtlZXAgdGhpcyBvYmplY3QgYWxpdmUgc28gdGhhdCB0YXNrcyBjYW4K
LSAgICAvLyBzdWNjZXNzZnVsbHkgbWFrZSB0aGVpciBjb21wbGV0aW9uIGNhbGxiYWNrcy4KLSAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBzZWxmKHRoaXMpOwotCi0gICAgVGFza1F1
ZXVlKiB0YXNrUXVldWUgPSBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzID8gJm1fcHJlZW1wdGl2
ZVRhc2tRdWV1ZSA6ICZtX3Rhc2tRdWV1ZTsKLSAgICBpZiAoIXRhc2tRdWV1ZS0+aXNFbXB0eSgp
ICYmIG1fc3RhdGUgIT0gRmluaXNoZWQpIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0gUnVu
bmluZyk7Ci0gICAgICAgIFJlZlB0cjxJREJPcGVyYXRpb24+IHRhc2sodGFza1F1ZXVlLT50YWtl
Rmlyc3QoKSk7Ci0gICAgICAgIHRhc2stPnBlcmZvcm0oW3NlbGYsIHRoaXMsIHRhc2tdKCkgewot
ICAgICAgICAgICAgbV90YXNrVGltZXIuc3RhcnRPbmVTaG90KDApOwotICAgICAgICB9KTsKLQot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcg
dGFza3MsIHdlIGhhdmVuJ3QgYWxyZWFkeSBjb21taXR0ZWQvYWJvcnRlZCwKLSAgICAvLyBhbmQg
dGhlIGZyb250LWVuZCByZXF1ZXN0ZWQgYSBjb21taXQsIGl0IGlzIG5vdyBzYWZlIHRvIGRvIHNv
LgotICAgIGlmICghaGFzUGVuZGluZ1Rhc2tzKCkgJiYgbV9zdGF0ZSAhPSBGaW5pc2hlZCAmJiBt
X2NvbW1pdFBlbmRpbmcpCi0gICAgICAgIGNvbW1pdCgpOwotfQotCi12b2lkIElEQlRyYW5zYWN0
aW9uQmFja2VuZDo6Y2xvc2VPcGVuQ3Vyc29ycygpCi17Ci0gICAgZm9yIChhdXRvJiBjdXJzb3Ig
OiBtX29wZW5DdXJzb3JzKQotICAgICAgICBjdXJzb3ItPmNsb3NlKCk7Ci0gICAgbV9vcGVuQ3Vy
c29ycy5jbGVhcigpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVD
cmVhdGVPYmplY3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBv
YmplY3RTdG9yZU1ldGFkYXRhKQotewotICAgIHNjaGVkdWxlVGFzayhDcmVhdGVPYmplY3RTdG9y
ZU9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlTWV0YWRhdGEpLCBDcmVhdGVPYmpl
Y3RTdG9yZUFib3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YS5p
ZCkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVEZWxldGVPYmpl
Y3RTdG9yZU9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9y
ZU1ldGFkYXRhKQotewotICAgIHNjaGVkdWxlVGFzayhEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlv
bjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlTWV0YWRhdGEpLCBEZWxldGVPYmplY3RTdG9yZUFi
b3J0T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YSkpOwotfQotCi12
b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9u
KGludDY0X3QgcmVxdWVzdGVkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFja3Ms
IGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQotewotICAgIHNjaGVkdWxlVGFz
ayhJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlz
LCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJhY2tzKSwgSURCRGF0
YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBT
dHJpbmc6Om51bWJlcihtZXRhZGF0YS52ZXJzaW9uKSwgbWV0YWRhdGEudmVyc2lvbikpOwotfQot
Ci12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVDcmVhdGVJbmRleE9wZXJhdGlv
bihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0
YWRhdGEpCi17Ci0gICAgc2NoZWR1bGVUYXNrKENyZWF0ZUluZGV4T3BlcmF0aW9uOjpjcmVhdGUo
dGhpcywgb2JqZWN0U3RvcmVJZCwgaW5kZXhNZXRhZGF0YSksIENyZWF0ZUluZGV4QWJvcnRPcGVy
YXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhLmlkKSk7Ci19
Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpzY2hlZHVsZURlbGV0ZUluZGV4T3BlcmF0
aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhN
ZXRhZGF0YSkKLXsKLSAgICBzY2hlZHVsZVRhc2soRGVsZXRlSW5kZXhPcGVyYXRpb246OmNyZWF0
ZSh0aGlzLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSwgRGVsZXRlSW5kZXhBYm9ydE9w
ZXJhdGlvbjo6Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4TWV0YWRhdGEpKTsKLX0K
LQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlR2V0T3BlcmF0aW9uKGNvbnN0
IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIEluZGV4ZWRE
Qjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQotewotICAgIHNjaGVkdWxlVGFzayhHZXRPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBtZXRh
ZGF0YSwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGN1cnNvclR5cGUsIGNhbGxi
YWNrcykpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVQdXRPcGVy
YXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSwg
UGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJ
REJEYXRhYmFzZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVj
dG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKLXsKLSAgICBzY2hlZHVsZVRhc2soUHV0T3BlcmF0
aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVNZXRhZGF0YSwgdmFsdWUsIGtleSwgcHV0TW9k
ZSwgY2FsbGJhY2tzLCBpbmRleElkcywgaW5kZXhLZXlzKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kOjpzY2hlZHVsZVNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbihzaXplX3QgaW5k
ZXhDb3VudCkKLXsKLSAgICBzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kOjpQcmVlbXB0
aXZlVGFzaywgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uOjpjcmVhdGUodGhpcywgaW5kZXhDb3Vu
dCkpOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6c2NoZWR1bGVPcGVuQ3Vyc29y
T3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGly
ZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNr
ZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKLXsKLSAgICBzY2hlZHVsZVRhc2soT3BlbkN1cnNvck9wZXJhdGlvbjo6Y3JlYXRlKHRoaXMs
IG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIGN1cnNvclR5cGUs
IHRhc2tUeXBlLCBjYWxsYmFja3MpKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6
OnNjaGVkdWxlQ291bnRPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIHNjaGVkdWxlVGFzayhDb3VudE9wZXJhdGlvbjo6
Y3JlYXRlKHRoaXMsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3Mp
KTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnNjaGVkdWxlRGVsZXRlUmFuZ2VP
cGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBr
ZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLXsKLSAgICBzY2hl
ZHVsZVRhc2soRGVsZXRlUmFuZ2VPcGVyYXRpb246OmNyZWF0ZSh0aGlzLCBvYmplY3RTdG9yZUlk
LCBrZXlSYW5nZSwgY2FsbGJhY2tzKSk7Ci19Ci0KLXZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5k
OjpzY2hlZHVsZUNsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIHNjaGVkdWxlVGFz
ayhDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uOjpjcmVhdGUodGhpcywgb2JqZWN0U3RvcmVJZCwg
Y2FsbGJhY2tzKSk7Ci19Ci0KLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9J
REJUcmFuc2FjdGlvbkJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODNiOWVmMy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSURCVHJhbnNhY3Rpb25CYWNrZW5kX2gKLSNkZWZp
bmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kX2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJh
c2VFcnJvci5oIgotI2luY2x1ZGUgIklEQk9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIlRpbWVyLmgi
Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCQ3Vy
c29yQmFja2VuZDsKLWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOwotCi1jbGFzcyBJREJUcmFu
c2FjdGlvbkJhY2tlbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gY3JlYXRl
KElEQkRhdGFiYXNlQmFja2VuZCosIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJ
ZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKLSAgICB+SURCVHJhbnNhY3Rpb25CYWNr
ZW5kKCk7Ci0KLSAgICB2b2lkIGNvbW1pdCgpOwotICAgIHZvaWQgYWJvcnQoKTsKLSAgICB2b2lk
IGFib3J0KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pOwotCi0gICAgdm9pZCBydW4oKTsK
LSAgICBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKCkgY29uc3QgIHsgcmV0dXJuIG1f
bW9kZTsgfQotICAgIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIHNjb3BlKCkgY29uc3QgIHsgcmV0
dXJuIG1fb2JqZWN0U3RvcmVJZHM7IH0KLQotICAgIHZvaWQgc2NoZWR1bGVUYXNrKFBhc3NSZWZQ
dHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVmUHRyPElEQlN5bmNocm9ub3VzT3BlcmF0aW9u
PiBhYm9ydFRhc2sgPSBudWxscHRyKSB7IHNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6
Ok5vcm1hbFRhc2ssIHRhc2ssIGFib3J0VGFzayk7IH0KLSAgICB2b2lkIHNjaGVkdWxlVGFzayhJ
REJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQk9wZXJhdGlvbj4sIFBh
c3NSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGFib3J0VGFzayA9IG51bGxwdHIpOwot
Ci0gICAgdm9pZCByZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCopOwotICAgIHZv
aWQgdW5yZWdpc3Rlck9wZW5DdXJzb3IoSURCQ3Vyc29yQmFja2VuZCopOwotCi0gICAgdm9pZCBh
ZGRQcmVlbXB0aXZlRXZlbnQoKSAgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKys7IH0KLSAg
ICB2b2lkIGRpZENvbXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgIHsgbV9wZW5kaW5nUHJlZW1wdGl2
ZUV2ZW50cy0tOyBBU1NFUlQobV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA+PSAwKTsgfQotCi0g
ICAgSURCRGF0YWJhc2VCYWNrZW5kJiBkYXRhYmFzZSgpIGNvbnN0ICB7IHJldHVybiAqbV9kYXRh
YmFzZTsgfQotCi0gICAgdm9pZCBzY2hlZHVsZUNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uKGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKLSAgICB2b2lkIHNjaGVkdWxlRGVsZXRlT2Jq
ZWN0U3RvcmVPcGVyYXRpb24oY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOwotICAgIHZv
aWQgc2NoZWR1bGVWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uKGludDY0X3QgcmVxdWVzdGVkVmVyc2lv
biwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpOwotICAgIHZvaWQgc2NoZWR1bGVDcmVh
dGVJbmRleE9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmKTsKLSAgICB2b2lkIHNjaGVkdWxlRGVsZXRlSW5kZXhPcGVyYXRpb24oaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJik7Ci0gICAgdm9pZCBzY2hlZHVs
ZUdldE9wZXJhdGlvbihjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBJbmRleGVk
REI6OkN1cnNvclR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7Ci0gICAgdm9pZCBzY2hl
ZHVsZVB1dE9wZXJhdGlvbihjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4sIElEQkRhdGFiYXNlQmFj
a2VuZDo6UHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBjb25zdCBWZWN0b3I8aW50
NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpOwotICAgIHZvaWQgc2No
ZWR1bGVTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oc2l6ZV90IGluZGV4Q291bnQpOwotICAgIHZv
aWQgc2NoZWR1bGVPcGVuQ3Vyc29yT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNr
VHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLSAgICB2b2lkIHNjaGVkdWxlQ291bnRP
cGVyYXRpb24oaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHZvaWQgc2No
ZWR1bGVEZWxldGVSYW5nZU9wZXJhdGlvbihpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwotICAgIHZvaWQgc2No
ZWR1bGVDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KTsKLQotICAgIGludDY0X3QgaWQoKSBjb25zdCB7IHJldHVy
biBtX2lkOyB9Ci0KLXByaXZhdGU6Ci0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKElEQkRhdGFi
YXNlQmFja2VuZCosIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
LCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpUcmFu
c2FjdGlvbk1vZGUpOwotCi0gICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgIFVub3BlbmVkLCAvLyBC
YWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgY3JlYXRlZC4KLSAgICAgICAgVW51c2Vk
LCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIGNyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQu
Ci0gICAgICAgIFN0YXJ0UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBiYWNraW5nIHN0
b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgc3RhcnRlZC4KLSAgICAgICAgUnVubmluZywgLy8gQmFj
a2luZyBzdG9yZSB0cmFuc2FjdGlvbiBzdGFydGVkIGJ1dCBub3QgeWV0IGZpbmlzaGVkLgotICAg
ICAgICBGaW5pc2hlZCwgLy8gRWl0aGVyIGFib3J0ZWQgb3IgY29tbWl0dGVkLgotICAgIH07Ci0K
LSAgICB2b2lkIHN0YXJ0KCk7Ci0KLSAgICBib29sIGlzVGFza1F1ZXVlRW1wdHkoKSBjb25zdDsK
LSAgICBib29sIGhhc1BlbmRpbmdUYXNrcygpIGNvbnN0OwotCi0gICAgdm9pZCB0YXNrVGltZXJG
aXJlZCgpOwotICAgIHZvaWQgY2xvc2VPcGVuQ3Vyc29ycygpOwotCi0gICAgY29uc3QgSGFzaFNl
dDxpbnQ2NF90PiBtX29iamVjdFN0b3JlSWRzOwotICAgIGNvbnN0IEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25Nb2RlIG1fbW9kZTsKLQotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgYm9vbCBtX2NvbW1p
dFBlbmRpbmc7Ci0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsK
LSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBtX2RhdGFiYXNlOwotCi0gICAgdHlwZWRl
ZiBEZXF1ZTxSZWZQdHI8SURCT3BlcmF0aW9uPj4gVGFza1F1ZXVlOwotICAgIFRhc2tRdWV1ZSBt
X3Rhc2tRdWV1ZTsKLSAgICBUYXNrUXVldWUgbV9wcmVlbXB0aXZlVGFza1F1ZXVlOwotICAgIERl
cXVlPFJlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4+IG1fYWJvcnRUYXNrUXVldWU7Ci0K
LSAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBpbnN0
ZWFkLgotICAgIFRpbWVyIG1fdGFza1RpbWVyOwotICAgIGludCBtX3BlbmRpbmdQcmVlbXB0aXZl
RXZlbnRzOwotCi0gICAgSGFzaFNldDxJREJDdXJzb3JCYWNrZW5kKj4gbV9vcGVuQ3Vyc29yczsK
LQotICAgIGludDY0X3QgbV9pZDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8gSURCVHJhbnNhY3Rp
b25CYWNrZW5kX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRp
b25zLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkyOWZjNmYuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0
aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjg1ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25CYWNrZW5kT3BlcmF0aW9ucy5oIgotCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5oIgot
I2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCS2V5UmFuZ2Uu
aCIKLSNpbmNsdWRlICJJREJSZWNvcmRJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSAiSURCU2VydmVy
Q29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2RlZmluZSBTVEFO
REFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSyBzdGQ6OmZ1bmN0aW9uPHZvaWQoUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUVycm9yPik+IG9wZXJhdGlvbkNhbGxiYWNrID0gXAotICAgIFtvcGVyYXRp
b24sIGNvbXBsZXRpb25DYWxsYmFja10oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
cikgeyBcCi0gICAgICAgIGlmIChlcnJvcikgXAotICAgICAgICAgICAgb3BlcmF0aW9uLT5tX3Ry
YW5zYWN0aW9uLT5hYm9ydChlcnJvcik7IFwKLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7
IFwKLSAgICB9OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXZvaWQgQ3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxs
YmFjaykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9u
Iik7Ci0KLSAgICBSZWZQdHI8Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24+IG9wZXJhdGlvbih0
aGlzKTsKLSAgICBTVEFOREFSRF9EQVRBQkFTRV9FUlJPUl9DQUxMQkFDSzsKLQotICAgIG1fdHJh
bnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmNyZWF0ZU9iamVjdFN0b3Jl
KCptX3RyYW5zYWN0aW9uLCAqdGhpcywgb3BlcmF0aW9uQ2FsbGJhY2spOwotfQotCi12b2lkIENy
ZWF0ZUluZGV4T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0
aW9uQ2FsbGJhY2spCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJDcmVhdGVJbmRleE9wZXJhdGlv
biIpOwotCi0gICAgUmVmUHRyPENyZWF0ZUluZGV4T3BlcmF0aW9uPiBvcGVyYXRpb24odGhpcyk7
Ci0gICAgU1RBTkRBUkRfREFUQUJBU0VfRVJST1JfQ0FMTEJBQ0s7Ci0KLSAgICBtX3RyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5jcmVhdGVJbmRleCgqbV90cmFuc2Fj
dGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKLX0KLQotdm9pZCBDcmVhdGVJbmRleEFi
b3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkNyZWF0ZUlu
ZGV4QWJvcnRPcGVyYXRpb24iKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnJlbW92
ZUluZGV4KG1fb2JqZWN0U3RvcmVJRCwgbV9pbmRleElEKTsKLX0KLQotdm9pZCBEZWxldGVJbmRl
eE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxi
YWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKLQot
ICAgIFJlZlB0cjxEZWxldGVJbmRleE9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOwotICAgIFNU
QU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOwotCi0gICAgbV90cmFuc2FjdGlvbi0+ZGF0
YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVsZXRlSW5kZXgoKm1fdHJhbnNhY3Rpb24sICp0
aGlzLCBvcGVyYXRpb25DYWxsYmFjayk7Ci19Ci0KLXZvaWQgRGVsZXRlSW5kZXhBYm9ydE9wZXJh
dGlvbjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJEZWxldGVJbmRleEFib3J0
T3BlcmF0aW9uIik7Ci0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5hZGRJbmRleChtX29i
amVjdFN0b3JlSUQsIG1faW5kZXhNZXRhZGF0YSwgSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElk
KTsKLX0KLQotdm9pZCBHZXRPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+
IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkdldE9wZXJhdGlv
biIpOwotCi0gICAgUmVmUHRyPEdldE9wZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOwotICAgIFNU
QU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NBTExCQUNLOwotCi0gICAgbV90cmFuc2FjdGlvbi0+ZGF0
YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZ2V0KCptX3RyYW5zYWN0aW9uLCAqdGhpcywgW3Ro
aXMsIG9wZXJhdGlvbiwgb3BlcmF0aW9uQ2FsbGJhY2tdKGNvbnN0IElEQkdldFJlc3VsdCYgcmVz
dWx0LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IHBycEVycm9yKSB7Ci0gICAgICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvciA9IHBycEVycm9yOwotCi0gICAgICAgIGlmIChl
cnJvcikKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC52YWx1ZUJ1ZmZlcigpLmRhdGEoKSkgewot
ICAgICAgICAgICAgICAgIGlmIChyZXN1bHQua2V5RGF0YSgpLmlzTnVsbCgpKQotICAgICAgICAg
ICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKCk7Ci0gICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKHJlc3VsdC5rZXlE
YXRhKCkubWF5YmVDcmVhdGVJREJLZXkoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGF1dG8gdmFsdWVCdWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShyZXN1bHQu
dmFsdWVCdWZmZXIoKS5kYXRhKCktPmRhdGEoKSwgcmVzdWx0LnZhbHVlQnVmZmVyKCkuZGF0YSgp
LT5zaXplKCkpOwotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmtleURhdGEoKS5pc051bGwo
KSkKLSAgICAgICAgICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2Vzcyh2YWx1ZUJ1ZmZl
ciwgcmVzdWx0LmtleURhdGEoKS5tYXliZUNyZWF0ZUlEQktleSgpLCByZXN1bHQua2V5UGF0aCgp
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fY2FsbGJhY2tz
LT5vblN1Y2Nlc3ModmFsdWVCdWZmZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgb3BlcmF0aW9uQ2FsbGJhY2soZXJyb3IucmVsZWFzZSgpKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBQdXRPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRp
b25DYWxsYmFjaykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIlB1dE9wZXJhdGlvbiIpOwotICAg
IEFTU0VSVChtX3RyYW5zYWN0aW9uLT5tb2RlKCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1v
ZGU6OlJlYWRPbmx5KTsKLSAgICBBU1NFUlQobV9pbmRleElEcy5zaXplKCkgPT0gbV9pbmRleEtl
eXMuc2l6ZSgpKTsKLQotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVj
dGlvbigpLnB1dCgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIFt0aGlzLCBjb21wbGV0aW9uQ2FsbGJh
Y2tdKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4g
cHJwRXJyb3IpIHsKLSAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gcHJw
RXJyb3I7Ci0gICAgICAgIGlmIChrZXkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghZXJyb3IpOwot
ICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcyhrZXkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgQVNTRVJUKGVycm9yKTsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKGVycm9yKTsKLSAgICAgICAgfQotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsK
LSAgICB9KTsKLX0KLQotdm9pZCBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb246OnBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBMT0coU3RvcmFn
ZUFQSSwgIlNldEluZGV4ZXNSZWFkeU9wZXJhdGlvbiIpOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2luZGV4Q291bnQ7ICsraSkKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+ZGlkQ29t
cGxldGVQcmVlbXB0aXZlRXZlbnQoKTsKLQotICAgIGNhbGxPbk1haW5UaHJlYWQoY29tcGxldGlv
bkNhbGxiYWNrKTsKLX0KLQotdm9pZCBPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgTE9HKFN0b3JhZ2VB
UEksICJPcGVuQ3Vyc29yT3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8T3BlbkN1cnNvck9wZXJh
dGlvbj4gb3BlcmF0aW9uKHRoaXMpOwotICAgIGF1dG8gY2FsbGJhY2sgPSBbdGhpcywgb3BlcmF0
aW9uLCBjb21wbGV0aW9uQ2FsbGJhY2tdKGludDY0X3QgY3Vyc29ySUQsIFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gdmFsdWVCdWZmZXIsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3Ip
IHsKLSAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJv
cihlcnJvcik7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWtleSkgewotICAgICAgICAgICAgLy8gSWYg
dGhlcmUncyBubyBlcnJvciBidXQgYWxzbyBubyBrZXksIHRoZW4gdGhlIGN1cnNvciBoYWQgbm8g
cmVjb3Jkcy4KLSAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3Moc3RhdGljX2Nhc3Q8
U2hhcmVkQnVmZmVyKj4obnVsbHB0cikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
UmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IGN1cnNvciA9IElEQkN1cnNvckJhY2tlbmQ6OmNyZWF0
ZShjdXJzb3JJRCwgbV9jdXJzb3JUeXBlLCBtX3Rhc2tUeXBlLCAqbV90cmFuc2FjdGlvbiwgbV9v
YmplY3RTdG9yZUlEKTsKLSAgICAgICAgICAgIGN1cnNvci0+dXBkYXRlQ3Vyc29yRGF0YShrZXku
Z2V0KCksIHByaW1hcnlLZXkuZ2V0KCksIHZhbHVlQnVmZmVyLmdldCgpKTsKLSAgICAgICAgICAg
IG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY3Vyc29yLnJlbGVhc2UoKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsKLSAgICB9OwotCi0gICAgbV90cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkub3BlbkN1cnNvcigqbV90cmFuc2FjdGlv
biwgKnRoaXMsIGNhbGxiYWNrKTsKLX0KLQotdm9pZCBDb3VudE9wZXJhdGlvbjo6cGVyZm9ybShz
dGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIExPRyhTdG9y
YWdlQVBJLCAiQ291bnRPcGVyYXRpb24iKTsKLQotICAgIFJlZlB0cjxDb3VudE9wZXJhdGlvbj4g
b3BlcmF0aW9uKHRoaXMpOwotICAgIGF1dG8gY2FsbGJhY2sgPSBbdGhpcywgb3BlcmF0aW9uLCBj
b21wbGV0aW9uQ2FsbGJhY2tdKGludDY0X3QgY291bnQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VF
cnJvcj4pIHsKLSAgICAgICAgLy8gRklYTUU6IFRoZSBMZXZlbERCIHBvcnQgbmV2ZXIgaGFkIGFu
IGVycm9yIGNvbmRpdGlvbiBmb3IgdGhlIGNvdW50IG9wZXJhdGlvbi4KLSAgICAgICAgLy8gV2Ug
cHJvYmFibHkgbmVlZCB0byBzdXBwb3J0IGFuIGVycm9yIGZvciB0aGUgY291bnQgb3BlcmF0aW9u
LCBicmVha2luZyB0aGUgTGV2ZWxEQiBwb3J0LgotICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNj
ZXNzKGNvdW50KTsKLQotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soKTsKLSAgICB9OwotCi0g
ICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuY291bnQoKm1f
dHJhbnNhY3Rpb24sICp0aGlzLCBjYWxsYmFjayk7Ci19Ci0KLXZvaWQgRGVsZXRlUmFuZ2VPcGVy
YXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykK
LXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7Ci0KLSAgICBS
ZWZQdHI8RGVsZXRlUmFuZ2VPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKLSAgICBhdXRvIGNh
bGxiYWNrID0gW3RoaXMsIG9wZXJhdGlvbiwgY29tcGxldGlvbkNhbGxiYWNrXShQYXNzUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKSB7Ci0gICAgICAgIGlmIChlcnJvcikKLSAgICAgICAg
ICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9jYWxsYmFja3MtPm9uU3VjY2VzcygpOwotCi0gICAgICAgIGNvbXBsZXRpb25DYWxsYmFj
aygpOwotICAgIH07Ci0KLSAgICBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5l
Y3Rpb24oKS5kZWxldGVSYW5nZSgqbV90cmFuc2FjdGlvbiwgKnRoaXMsIGNhbGxiYWNrKTsKLX0K
LQotdm9pZCBDbGVhck9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248
dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJDbGVh
ck9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0KLSAgICBSZWZQdHI8Q2xlYXJPYmplY3RTdG9yZU9w
ZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOwotCi0gICAgYXV0byBjbGVhckNhbGxiYWNrID0gW3Ro
aXMsIG9wZXJhdGlvbiwgY29tcGxldGlvbkNhbGxiYWNrXShQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+IHBycEVycm9yKSB7Ci0gICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
ciA9IHBycEVycm9yOwotCi0gICAgICAgIGlmIChlcnJvcikgewotICAgICAgICAgICAgbV9jYWxs
YmFja3MtPm9uRXJyb3IoZXJyb3IpOwotICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQo
ZXJyb3IucmVsZWFzZSgpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NhbGxiYWNr
cy0+b25TdWNjZXNzKCk7Ci0KLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKCk7Ci0gICAgfTsK
LQotICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmNsZWFy
T2JqZWN0U3RvcmUoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBjbGVhckNhbGxiYWNrKTsKLX0KLQot
dm9pZCBEZWxldGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZv
aWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRl
T2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKLQotICAgIFJlZlB0cjxEZWxldGVPYmplY3RTdG9yZU9w
ZXJhdGlvbj4gb3BlcmF0aW9uKHRoaXMpOwotICAgIFNUQU5EQVJEX0RBVEFCQVNFX0VSUk9SX0NB
TExCQUNLOwotCi0gICAgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9u
KCkuZGVsZXRlT2JqZWN0U3RvcmUoKm1fdHJhbnNhY3Rpb24sICp0aGlzLCBvcGVyYXRpb25DYWxs
YmFjayk7Ci19Ci0KLXZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlT3BlcmF0
aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17
Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJWZXJzaW9uQ2hhbmdlT3BlcmF0aW9uIik7Ci0KLSAgICB1
aW50NjRfdCBvbGRWZXJzaW9uID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5tZXRhZGF0YSgp
LnZlcnNpb247Ci0gICAgaWYgKG9sZFZlcnNpb24gPT0gSURCRGF0YWJhc2VNZXRhZGF0YTo6Tm9J
bnRWZXJzaW9uKQotICAgICAgICBvbGRWZXJzaW9uID0gMDsKLQotICAgIFJlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24+IG9wZXJhdGlvbih0aGlzKTsKLSAg
ICBBU1NFUlQoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1fdmVyc2lvbikgPiBvbGRWZXJzaW9uKTsK
LQotICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4g
b3BlcmF0aW9uQ2FsbGJhY2sgPSBbb2xkVmVyc2lvbiwgb3BlcmF0aW9uLCB0aGlzLCBjb21wbGV0
aW9uQ2FsbGJhY2tdKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gcHJwRXJyb3IpIHsKLSAg
ICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gcHJwRXJyb3I7Ci0gICAgICAg
IGlmIChlcnJvcikgewotICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoZXJyb3IpOwot
ICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmhhc1BlbmRp
bmdTZWNvbmRIYWxmT3BlbigpKTsKLSAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuc2V0Q3VycmVudFZlcnNpb24obV92ZXJzaW9uKTsKLSAgICAgICAgICAgIG1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkuc2V0UGVuZGluZ1NlY29uZEhhbGZPcGVuKHN0ZDo6bWFrZV91bmlxdWU8
SURCUGVuZGluZ09wZW5DYWxsPigqbV9jYWxsYmFja3MsICptX2RhdGFiYXNlQ2FsbGJhY2tzLCBt
X3RyYW5zYWN0aW9uLT5pZCgpLCBtX3ZlcnNpb24pKTsKLSAgICAgICAgICAgIG1fY2FsbGJhY2tz
LT5vblVwZ3JhZGVOZWVkZWQob2xkVmVyc2lvbiwgJm1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCks
IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkubWV0YWRhdGEoKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgY29tcGxldGlvbkNhbGxiYWNrKCk7Ci0gICAgfTsKLQotICAgIG1fdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmNoYW5nZURhdGFiYXNlVmVyc2lvbigqbV90cmFu
c2FjdGlvbiwgKnRoaXMsIG9wZXJhdGlvbkNhbGxiYWNrKTsKLX0KLQotdm9pZCBDcmVhdGVPYmpl
Y3RTdG9yZUFib3J0T3BlcmF0aW9uOjpwZXJmb3JtKCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IkNyZWF0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24iKTsKLSAgICBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLnJlbW92ZU9iamVjdFN0b3JlKG1fb2JqZWN0U3RvcmVJRCk7Ci19Ci0KLXZvaWQg
RGVsZXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbjo6cGVyZm9ybSgpCi17Ci0gICAgTE9HKFN0
b3JhZ2VBUEksICJEZWxldGVPYmplY3RTdG9yZUFib3J0T3BlcmF0aW9uIik7Ci0gICAgbV90cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKS5hZGRPYmplY3RTdG9yZShtX29iamVjdFN0b3JlTWV0YWRhdGEs
IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7Ci19Ci0KLXZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb246OnBlcmZvcm0oKQotewotICAg
IExPRyhTdG9yYWdlQVBJLCAiVmVyc2lvbkNoYW5nZUFib3J0T3BlcmF0aW9uIik7Ci0gICAgbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXRDdXJyZW50VmVyc2lvbihtX3ByZXZpb3VzSW50VmVy
c2lvbik7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVy
YXRpb25zLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MTA5NzkuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0
aW9uQmFja2VuZE9wZXJhdGlvbnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3MSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zX2gKLSNk
ZWZpbmUgSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9uc19oCi0KLSNpbmNsdWRlICJJREJE
YXRhYmFzZUJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJJ
REJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElEQlNlcnZlckNvbm5lY3Rpb247Ci0KLWNs
YXNzIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlv
bkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmpl
Y3RTdG9yZU1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3Jl
YXRlT2JqZWN0U3RvcmVPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTWV0YWRhdGEp
KTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+
IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Ci0KLSAgICBjb25zdCBJREJPYmplY3RT
dG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9vYmpl
Y3RTdG9yZU1ldGFkYXRhOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ3JlYXRlT2JqZWN0U3RvcmVPcGVy
YXRpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKLSAgICAgICAgOiBtX3RyYW5zYWN0
aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RT
dG9yZU1ldGFkYXRhKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFk
YXRhIG1fb2JqZWN0U3RvcmVNZXRhZGF0YTsKLX07Ci0KLWNsYXNzIERlbGV0ZU9iamVjdFN0b3Jl
T3BlcmF0aW9uIDogcHVibGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxJREJPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9u
LCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGVsZXRlT2JqZWN0U3RvcmVPcGVyYXRp
b24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlTWV0YWRhdGEpKTsKLSAgICB9Ci0gICAgdmlydHVh
bCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3Zl
cnJpZGUgZmluYWw7Ci0KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbi5nZXQoKTsgfQotICAgIGNvbnN0IElEQk9iamVj
dFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX29i
amVjdFN0b3JlTWV0YWRhdGE7IH0KLQotcHJpdmF0ZToKLSAgICBEZWxldGVPYmplY3RTdG9yZU9w
ZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJPYmpl
Y3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZU1ldGFkYXRhKQotICAgICAgICA6IG1fdHJhbnNh
Y3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZU1ldGFkYXRhKG9iamVj
dFN0b3JlTWV0YWRhdGEpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0
YSBtX29iamVjdFN0b3JlTWV0YWRhdGE7Ci19OwotCi1jbGFzcyBJREJEYXRhYmFzZUJhY2tlbmQ6
OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCogdHJhbnNhY3Rpb24sIGludDY0X3QgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxs
YmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWZXJzaW9uQ2hhbmdl
T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCB2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNlQ2FsbGJh
Y2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOwotCi0gICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kKiB0cmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb24uZ2V0
KCk7IH0KLSAgICBpbnQ2NF90IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0K
LSAgICBJREJEYXRhYmFzZUNhbGxiYWNrcyogZGF0YWJhc2VDYWxsYmFja3MoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGFiYXNlQ2FsbGJhY2tzLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgVmVyc2lv
bkNoYW5nZU9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2
NF90IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQ
dHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQotICAgICAgICA6IG1f
dHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV92ZXJzaW9uKHZlcnNpb24pCi0g
ICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICAgICAsIG1fZGF0YWJhc2VDYWxs
YmFja3MoZGF0YWJhc2VDYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgaW50NjRfdCBtX3ZlcnNpb247
Ci0gICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOwotfTsKLQotY2xhc3MgQ3JlYXRl
T2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbiA6IHB1YmxpYyBJREJTeW5jaHJvbm91c09wZXJhdGlv
biB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4gY3Jl
YXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENyZWF0ZU9iamVjdFN0
b3JlQWJvcnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQpKTsKLSAgICB9Ci0g
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oKSBvdmVycmlkZSBmaW5hbDsKLXByaXZhdGU6Ci0gICAg
Q3JlYXRlT2JqZWN0U3RvcmVBYm9ydE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRy
YW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCi0gICAgICAgIDogbV90cmFuc2FjdGlv
bih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkK
LSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFu
c2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKLX07Ci0KLWNsYXNz
IERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNP
cGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCU3luY2hyb25vdXNPcGVyYXRp
b24+IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhJiBvYmplY3RTdG9yZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24odHJhbnNhY3Rpb24s
IG9iamVjdFN0b3JlKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKCkgb3ZlcnJp
ZGUgZmluYWw7Ci1wcml2YXRlOgotICAgIERlbGV0ZU9iamVjdFN0b3JlQWJvcnRPcGVyYXRpb24o
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSkKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YShvYmplY3RTdG9yZU1l
dGFkYXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
PiBtX3RyYW5zYWN0aW9uOwotICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9y
ZU1ldGFkYXRhOwotfTsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJzaW9uQ2hhbmdl
QWJvcnRPcGVyYXRpb24gOiBwdWJsaWMgSURCU3luY2hyb25vdXNPcGVyYXRpb24gewotcHVibGlj
OgotICAgIHN0YXRpYyBSZWY8SURCU3luY2hyb25vdXNPcGVyYXRpb24+IGNyZWF0ZShJREJUcmFu
c2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIHByZXZpb3VzVmVyc2lv
biwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCi0gICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBWZXJzaW9uQ2hhbmdlQWJvcnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIHByZXZp
b3VzVmVyc2lvbiwgcHJldmlvdXNJbnRWZXJzaW9uKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9p
ZCBwZXJmb3JtKCkgb3ZlcnJpZGUgZmluYWw7Ci1wcml2YXRlOgotICAgIFZlcnNpb25DaGFuZ2VB
Ym9ydE9wZXJhdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBT
dHJpbmcmIHByZXZpb3VzVmVyc2lvbiwgaW50NjRfdCBwcmV2aW91c0ludFZlcnNpb24pCi0gICAg
ICAgIDogbV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX3ByZXZpb3VzVmVy
c2lvbihwcmV2aW91c1ZlcnNpb24pCi0gICAgICAgICwgbV9wcmV2aW91c0ludFZlcnNpb24ocHJl
dmlvdXNJbnRWZXJzaW9uKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIFN0cmluZyBtX3ByZXZpb3VzVmVyc2lvbjsK
LSAgICBpbnQ2NF90IG1fcHJldmlvdXNJbnRWZXJzaW9uOwotfTsKLQotY2xhc3MgQ3JlYXRlSW5k
ZXhPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rp
b24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhN
ZXRhZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENyZWF0ZUluZGV4
T3BlcmF0aW9uKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZUlkLCBpbmRleE1ldGFkYXRhKSk7Ci0g
ICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNj
ZXNzQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOwotCi0gICAgaW50NjRfdCBvYmplY3RTdG9yZUlE
KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RTdG9yZUlEOyB9Ci0gICAgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSYgaWRiSW5kZXhNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhNZXRhZGF0
YTsgfQotCi1wcml2YXRlOgotICAgIENyZWF0ZUluZGV4T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9u
QmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5z
YWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RTdG9yZUlkKQotICAgICAg
ICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgIHsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IGlu
dDY0X3QgbV9vYmplY3RTdG9yZUlEOwotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEgbV9pbmRl
eE1ldGFkYXRhOwotfTsKLQotY2xhc3MgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbiA6IHB1Ymxp
YyBJREJTeW5jaHJvbm91c09wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJT
eW5jaHJvbm91c09wZXJhdGlvbj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNh
Y3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ3JlYXRlSW5kZXhBYm9ydE9wZXJhdGlvbih0cmFu
c2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybSgpIG92ZXJyaWRlIGZpbmFsOwotcHJpdmF0ZToKLSAgICBDcmVhdGVJbmRleEFi
b3J0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCi0g
ICAgICAgICwgbV9pbmRleElEKGluZGV4SWQpCi0gICAgewotICAgIH0KLQotICAgIGNvbnN0IFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50
NjRfdCBtX29iamVjdFN0b3JlSUQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2luZGV4SUQ7Ci19Owot
Ci1jbGFzcyBEZWxldGVJbmRleE9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVi
bGljOgotICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRl
eE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgRGVsZXRlSW5kZXhPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQsIGlu
ZGV4TWV0YWRhdGEpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5j
dGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Ci0KLSAgICBpbnQ2
NF90IG9iamVjdFN0b3JlSUQoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KLSAg
ICBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpZGJJbmRleE1ldGFkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleE1ldGFkYXRhOyB9Ci0KLXByaXZhdGU6Ci0gICAgRGVsZXRlSW5kZXhPcGVyYXRp
b24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgICAgICA6IG1f
dHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVj
dFN0b3JlSWQpCi0gICAgICAgICwgbV9pbmRleE1ldGFkYXRhKGluZGV4TWV0YWRhdGEpCi0gICAg
ewotICAgIH0KLQotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rp
b247Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSUQ7Ci0gICAgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Ci19OwotCi1jbGFzcyBEZWxldGVJbmRleEFib3J0
T3BlcmF0aW9uIDogcHVibGljIElEQlN5bmNocm9ub3VzT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPElEQlN5bmNocm9ub3VzT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rp
b25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJJ
bmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgRGVsZXRlSW5kZXhBYm9ydE9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3Rv
cmVJZCwgaW5kZXhNZXRhZGF0YSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybSgp
IG92ZXJyaWRlIGZpbmFsOwotcHJpdmF0ZToKLSAgICBEZWxldGVJbmRleEFib3J0T3BlcmF0aW9u
KElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgaW5kZXhNZXRhZGF0YSkKLSAgICAgICAgOiBtX3Ry
YW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJRChvYmplY3RT
dG9yZUlkKQotICAgICAgICAsIG1faW5kZXhNZXRhZGF0YShpbmRleE1ldGFkYXRhKQotICAgIHsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9u
OwotICAgIGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwotICAgIGNvbnN0IElEQkluZGV4
TWV0YWRhdGEgbV9pbmRleE1ldGFkYXRhOwotfTsKLQotY2xhc3MgR2V0T3BlcmF0aW9uIDogcHVi
bGljIElEQk9wZXJhdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJPcGVyYXRpb24+
IGNyZWF0ZShJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBjb25zdCBJREJEYXRh
YmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNv
clR5cGUgY3Vyc29yVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdldE9wZXJhdGlvbih0cmFuc2FjdGlv
biwgbWV0YWRhdGEsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGtleVJhbmdlLCBjdXJzb3JUeXBl
LCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5j
dGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Ci0KLSAgICBpbnQ2
NF90IG9iamVjdFN0b3JlSUQoKSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KLSAg
ICBpbnQ2NF90IGluZGV4SUQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4SUQ7IH0KLSAgICBJbmRl
eGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Vyc29yVHlw
ZTsgfQotICAgIElEQktleVJhbmdlKiBrZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5UmFu
Z2UuZ2V0KCk7IH0KLSAgICBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2F1
dG9JbmNyZW1lbnQ7IH0KLSAgICBJREJLZXlQYXRoIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBt
X2tleVBhdGg7IH0KLQotcHJpdmF0ZToKLSAgICBHZXRPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25C
YWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgICAgIDogbV90cmFuc2FjdGlvbih0
cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJZCkKLSAg
ICAgICAgLCBtX2luZGV4SUQoaW5kZXhJZCkKLSAgICAgICAgLCBtX2tleVBhdGgobWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKS5rZXlQYXRoKQotICAgICAgICAsIG1fYXV0
b0luY3JlbWVudChtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLmF1dG9J
bmNyZW1lbnQpCi0gICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKLSAgICAgICAgLCBtX2N1
cnNvclR5cGUoY3Vyc29yVHlwZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0g
ICAgewotICAgICAgICBBU1NFUlQobWV0YWRhdGEub2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVj
dFN0b3JlSWQpKTsKLSAgICAgICAgQVNTRVJUKG1ldGFkYXRhLm9iamVjdFN0b3Jlcy5nZXQob2Jq
ZWN0U3RvcmVJZCkuaWQgPT0gb2JqZWN0U3RvcmVJZCk7Ci0gICAgfQotCi0gICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlvbjsKLSAgICBjb25zdCBpbnQ2NF90IG1f
b2JqZWN0U3RvcmVJRDsKLSAgICBjb25zdCBpbnQ2NF90IG1faW5kZXhJRDsKLSAgICBjb25zdCBJ
REJLZXlQYXRoIG1fa2V5UGF0aDsKLSAgICBjb25zdCBib29sIG1fYXV0b0luY3JlbWVudDsKLSAg
ICBjb25zdCBSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAgY29uc3QgSW5kZXhl
ZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBjb25zdCBSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLWNsYXNzIFB1dE9wZXJhdGlvbiA6IHB1YmxpYyBJREJP
cGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUo
SURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSYgb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSwgUGFz
c1JlZlB0cjxJREJLZXk+IGtleSwgSURCRGF0YWJhc2VCYWNrZW5kOjpQdXRNb2RlIHB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIGNvbnN0IFZlY3RvcjxpbnQ2NF90
PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQdXRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9i
amVjdFN0b3JlLCB2YWx1ZSwga2V5LCBwdXRNb2RlLCBjYWxsYmFja3MsIGluZGV4SWRzLCBpbmRl
eEtleXMpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lkIHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2
b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUgZmluYWw7Ci0KLSAgICBJREJEYXRhYmFz
ZUJhY2tlbmQ6OlB1dE1vZGUgcHV0TW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHV0TW9kZTsgfQot
ICAgIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vYmplY3RTdG9yZTsgfQotICAgIElEQktleSoga2V5KCkgY29uc3QgeyByZXR1cm4g
bV9rZXkuZ2V0KCk7IH0KLSAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SURzKCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleElEczsgfQotICAgIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBp
bmRleEtleXMoKSBjb25zdCB7IHJldHVybiBtX2luZGV4S2V5czsgfQotICAgIFNoYXJlZEJ1ZmZl
ciogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgUHV0T3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGNvbnN0
IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4mIHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBJREJEYXRhYmFzZUJhY2tlbmQ6
OlB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGlu
ZGV4S2V5cykKLSAgICAgICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAs
IG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0gICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKLSAg
ICAgICAgLCBtX2tleShrZXkpCi0gICAgICAgICwgbV9wdXRNb2RlKHB1dE1vZGUpCi0gICAgICAg
ICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgICAgICAsIG1faW5kZXhJRHMoaW5kZXhJZHMp
Ci0gICAgICAgICwgbV9pbmRleEtleXMoaW5kZXhLZXlzKQotICAgIHsKLSAgICB9Ci0KLSAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAgIGNvbnN0IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGEgbV9vYmplY3RTdG9yZTsKLSAgICBjb25zdCBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBtX3ZhbHVlOwotICAgIGNvbnN0IFJlZlB0cjxJREJLZXk+IG1fa2V5OwotICAg
IGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBtX3B1dE1vZGU7Ci0gICAgY29uc3Qg
UmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Ci0gICAgY29uc3QgVmVjdG9yPGludDY0
X3Q+IG1faW5kZXhJRHM7Ci0gICAgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4gbV9pbmRleEtleXM7
Ci19OwotCi1jbGFzcyBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24gOiBwdWJsaWMgSURCT3BlcmF0
aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlvbj4gY3JlYXRlKElEQlRy
YW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIHNpemVfdCBpbmRleENvdW50KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2V0SW5kZXhlc1JlYWR5T3BlcmF0aW9uKHRy
YW5zYWN0aW9uLCBpbmRleENvdW50KSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3Jt
KHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOwot
cHJpdmF0ZToKLSAgICBTZXRJbmRleGVzUmVhZHlPcGVyYXRpb24oSURCVHJhbnNhY3Rpb25CYWNr
ZW5kKiB0cmFuc2FjdGlvbiwgc2l6ZV90IGluZGV4Q291bnQpCi0gICAgICAgIDogbV90cmFuc2Fj
dGlvbih0cmFuc2FjdGlvbikKLSAgICAgICAgLCBtX2luZGV4Q291bnQoaW5kZXhDb3VudCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2Fj
dGlvbjsKLSAgICBjb25zdCBzaXplX3QgbV9pbmRleENvdW50OwotfTsKLQotY2xhc3MgT3BlbkN1
cnNvck9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2Fj
dGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rp
b24sIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJhY2tlbmQ6
OlRhc2tUeXBlIHRhc2tUeXBlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3BlbkN1cnNvck9wZXJhdGlvbih0
cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwg
Y3Vyc29yVHlwZSwgdGFza1R5cGUsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlk
ZSBmaW5hbDsKLQotICAgIGludDY0X3QgdHJhbnNhY3Rpb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhbnNhY3Rpb24tPmlkKCk7IH0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSUQoKSBjb25zdCB7
IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KLSAgICBpbnQ2NF90IGluZGV4SUQoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4SUQ7IH0KLSAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJl
Y3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2RpcmVjdGlvbjsgfQotICAgIEluZGV4ZWREQjo6Q3Vy
c29yVHlwZSBjdXJzb3JUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJzb3JUeXBlOyB9Ci0gICAg
SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGFza1R5cGU7IH0KLSAgICBJREJLZXlSYW5nZSoga2V5UmFuZ2UoKSBjb25zdCB7IHJldHVybiBt
X2tleVJhbmdlLmdldCgpOyB9Ci0gICAgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gY3Vyc29y
RGlyZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaXJlY3Rpb247IH0KLQotcHJpdmF0ZToKLSAg
ICBPcGVuQ3Vyc29yT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24s
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBrZXlSYW5nZSwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBJ
bmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNr
VHlwZSB0YXNrVHlwZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAg
ICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJ
RChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1faW5kZXhJRChpbmRleElkKQotICAgICAgICAs
IG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQot
ICAgICAgICAsIG1fY3Vyc29yVHlwZShjdXJzb3JUeXBlKQotICAgICAgICAsIG1fdGFza1R5cGUo
dGFza1R5cGUpCi0gICAgICAgICwgbV9jYWxsYmFja3MoY2FsbGJhY2tzKQotICAgIHsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBtX3RyYW5zYWN0aW9uOwotICAg
IGNvbnN0IGludDY0X3QgbV9vYmplY3RTdG9yZUlEOwotICAgIGNvbnN0IGludDY0X3QgbV9pbmRl
eElEOwotICAgIGNvbnN0IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IG1fa2V5UmFuZ2U7Ci0gICAg
Y29uc3QgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gbV9kaXJlY3Rpb247Ci0gICAgY29uc3Qg
SW5kZXhlZERCOjpDdXJzb3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBjb25zdCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OlRhc2tUeXBlIG1fdGFza1R5cGU7Ci0gICAgY29uc3QgUmVmUHRyPElEQkNhbGxi
YWNrcz4gbV9jYWxsYmFja3M7Ci19OwotCi1jbGFzcyBDb3VudE9wZXJhdGlvbiA6IHB1YmxpYyBJ
REJPcGVyYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVh
dGUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgQ291bnRPcGVyYXRpb24odHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSWQs
IGluZGV4SWQsIGtleVJhbmdlLCBjYWxsYmFja3MpKTsKLSAgICB9Ci0gICAgdmlydHVhbCB2b2lk
IHBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjaykgb3ZlcnJpZGUg
ZmluYWw7Ci0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSUQoKSBjb25zdCB7IHJldHVybiBtX29i
amVjdFN0b3JlSUQ7IH0KLSAgICBpbnQ2NF90IGluZGV4SUQoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4SUQ7IH0KLSAgICBJREJLZXlSYW5nZSoga2V5UmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2tl
eVJhbmdlLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ291bnRPcGVyYXRpb24oSURCVHJhbnNh
Y3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rp
b24pCi0gICAgICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwg
bV9pbmRleElEKGluZGV4SWQpCi0gICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5nZSkKLSAgICAg
ICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3QgaW50NjRfdCBt
X29iamVjdFN0b3JlSUQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX2luZGV4SUQ7Ci0gICAgY29uc3Qg
UmVmUHRyPElEQktleVJhbmdlPiBtX2tleVJhbmdlOwotICAgIGNvbnN0IFJlZlB0cjxJREJDYWxs
YmFja3M+IG1fY2FsbGJhY2tzOwotfTsKLQotY2xhc3MgRGVsZXRlUmFuZ2VPcGVyYXRpb24gOiBw
dWJsaWMgSURCT3BlcmF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQk9wZXJhdGlv
bj4gY3JlYXRlKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEZWxldGVSYW5nZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVJZCwga2V5
UmFuZ2UsIGNhbGxiYWNrcykpOwotICAgIH0KLSAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybShzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZSBmaW5hbDsKLQotICAg
IGludDY0X3Qgb2JqZWN0U3RvcmVJRCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0U3RvcmVJRDsg
fQotICAgIElEQktleVJhbmdlKiBrZXlSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5UmFuZ2Uu
Z2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBEZWxldGVSYW5nZU9wZXJhdGlvbihJREJUcmFuc2Fj
dGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzKQotICAgICAgICA6IG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgICAgICwgbV9v
YmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSWQpCi0gICAgICAgICwgbV9rZXlSYW5nZShrZXlSYW5n
ZSkKLSAgICAgICAgLCBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCi0gICAgewotICAgIH0KLQotICAg
IFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IG1fdHJhbnNhY3Rpb247Ci0gICAgY29uc3Qg
aW50NjRfdCBtX29iamVjdFN0b3JlSUQ7Ci0gICAgY29uc3QgUmVmUHRyPElEQktleVJhbmdlPiBt
X2tleVJhbmdlOwotICAgIGNvbnN0IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwot
fTsKLQotY2xhc3MgQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbiA6IHB1YmxpYyBJREJPcGVyYXRp
b24gewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SURCT3BlcmF0aW9uPiBjcmVhdGUoSURCVHJh
bnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbiwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgQ2xlYXJPYmplY3RTdG9yZU9wZXJhdGlvbih0cmFuc2FjdGlvbiwgb2JqZWN0
U3RvcmVJZCwgY2FsbGJhY2tzKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2spIG92ZXJyaWRlIGZpbmFsOwotCi0g
ICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhbnNhY3Rpb24uZ2V0KCk7IH0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSUQoKSBjb25zdCB7
IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KLQotcHJpdmF0ZToKLSAgICBDbGVhck9iamVjdFN0
b3JlT3BlcmF0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCogdHJhbnNhY3Rpb24sIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKLSAgICAg
ICAgOiBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICAgICAsIG1fb2JqZWN0U3RvcmVJ
RChvYmplY3RTdG9yZUlkKQotICAgICAgICAsIG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKLSAgICB7
Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gbV90cmFuc2FjdGlv
bjsKLSAgICBjb25zdCBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKLSAgICBjb25zdCBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQlRyYW5z
YWN0aW9uQmFja2VuZE9wZXJhdGlvbnNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0lEQlRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDY5ZTBhLi4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCRGF0
YWJhc2VDYWxsYmFja3MuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCkKLXsKLX0KLQotSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
fklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKQotewotfQotCi12b2lkIElEQlRyYW5zYWN0aW9u
Q29vcmRpbmF0b3I6OmRpZENyZWF0ZVRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZCog
dHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFu
c2FjdGlvbikpOwotICAgIG1fdHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbiwgdHJhbnNhY3Rp
b24pOwotfQotCi12b2lkIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmRpZFN0YXJ0VHJhbnNh
Y3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQo
bV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKTsKLQotICAgIG1fcXVldWVkVHJh
bnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbik7Ci0gICAgcHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlv
bnMoKTsKLX0KLQotdm9pZCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpkaWRGaW5pc2hUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VS
VChtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotCi0gICAgaWYgKG1fcXVl
dWVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkgewotICAgICAgICBBU1NFUlQo
IW1fc3RhcnRlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikpOwotICAgICAgICBt
X3F1ZXVlZFRyYW5zYWN0aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOwotICAgIH0gZWxzZSBpZiAo
bV9zdGFydGVkVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkKLSAgICAgICAgbV9z
dGFydGVkVHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7Ci0KLSAgICBtX3RyYW5zYWN0
aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24pOwotCi0gICAgcHJvY2Vzc1N0YXJ0ZWRUcmFuc2FjdGlv
bnMoKTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLS8vIFZlcmlmaWVzIGludGVybmFsIGNvbnNpc3Rp
ZW5jeSB3aGlsZSByZXR1cm5pbmcgd2hldGhlciBhbnl0aGluZyBpcyBmb3VuZC4KLWJvb2wgSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvcjo6aXNBY3RpdmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kKiB0
cmFuc2FjdGlvbikKLXsKLSAgICBib29sIGZvdW5kID0gZmFsc2U7Ci0gICAgaWYgKG1fcXVldWVk
VHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uKSkKLSAgICAgICAgZm91bmQgPSB0cnVl
OwotICAgIGlmIChtX3N0YXJ0ZWRUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24pKSB7
Ci0gICAgICAgIEFTU0VSVCghZm91bmQpOwotICAgICAgICBmb3VuZCA9IHRydWU7Ci0gICAgfQot
ICAgIEFTU0VSVChmb3VuZCA9PSBtX3RyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbikp
OwotICAgIHJldHVybiBmb3VuZDsKLX0KLSNlbmRpZgotCi12b2lkIElEQlRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I6OnByb2Nlc3NTdGFydGVkVHJhbnNhY3Rpb25zKCkKLXsKLSAgICBpZiAobV9xdWV1
ZWRUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQo
bV9zdGFydGVkVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSB8fCAoKm1fc3RhcnRlZFRyYW5zYWN0aW9u
cy5iZWdpbigpKS0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJzaW9u
Q2hhbmdlKTsKLQotICAgIExpc3RIYXNoU2V0PElEQlRyYW5zYWN0aW9uQmFja2VuZCo+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fcXVldWVkVHJhbnNhY3Rpb25zLmJlZ2luKCk7Ci0gICAgd2hpbGUg
KGl0ICE9IG1fcXVldWVkVHJhbnNhY3Rpb25zLmVuZCgpKSB7Ci0gICAgICAgIElEQlRyYW5zYWN0
aW9uQmFja2VuZCogdHJhbnNhY3Rpb24gPSAqaXQ7Ci0gICAgICAgICsraXQ7Ci0gICAgICAgIGlm
IChjYW5SdW5UcmFuc2FjdGlvbih0cmFuc2FjdGlvbikpIHsKLSAgICAgICAgICAgIG1fcXVldWVk
VHJhbnNhY3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbik7Ci0gICAgICAgICAgICBtX3N0YXJ0ZWRU
cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uKTsKLSAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5y
dW4oKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9vbCBJREJUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOjpjYW5SdW5UcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqIHRyYW5zYWN0aW9u
KQotewotICAgIEFTU0VSVChtX3F1ZXVlZFRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlv
bikpOwotCi0gICAgVU5VU0VEX1BBUkFNKHRyYW5zYWN0aW9uKTsKLSAgICByZXR1cm4gIW1fc3Rh
cnRlZFRyYW5zYWN0aW9ucy5zaXplKCk7Ci19Ci0KLX07Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDU1NDM4Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9JREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yX2gKLSNkZWZpbmUgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvcl9o
Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgPG1lbW9yeT4KLSNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJREJU
cmFuc2FjdGlvbkJhY2tlbmQ7Ci0KLS8vIFRyYW5zYWN0aW9ucyBhcmUgZXhlY3V0ZWQgaW4gdGhl
IG9yZGVyIHRoZSB3ZXJlIGNyZWF0ZWQuCi1jbGFzcyBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
IHsKLXB1YmxpYzoKLSAgICBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7Ci0gICAgdmlydHVh
bCB+SURCVHJhbnNhY3Rpb25Db29yZGluYXRvcigpOwotCi0gICAgLy8gQ2FsbGVkIGJ5IHRyYW5z
YWN0aW9ucyBhcyB0aGV5IHN0YXJ0IGFuZCBmaW5pc2guCi0gICAgdm9pZCBkaWRDcmVhdGVUcmFu
c2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKLSAgICB2b2lkIGRpZE9wZW5CYWNraW5n
U3RvcmVUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKLSAgICB2b2lkIGRpZFN0
YXJ0VHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7Ci0gICAgdm9pZCBkaWRGaW5p
c2hUcmFuc2FjdGlvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQqKTsKLQotI2lmbmRlZiBOREVCVUcK
LSAgICBib29sIGlzQWN0aXZlKElEQlRyYW5zYWN0aW9uQmFja2VuZCopOwotI2VuZGlmCi0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBwcm9jZXNzU3RhcnRlZFRyYW5zYWN0aW9ucygpOwotICAgIGJvb2wg
Y2FuUnVuVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kKik7Ci0KLSAgICAvLyBUaGlz
IGlzIGp1c3QgYW4gZWZmaWNpZW50IHdheSB0byBrZWVwIHJlZmVyZW5jZXMgdG8gYWxsIHRyYW5z
YWN0aW9ucy4KLSAgICBIYXNoTWFwPElEQlRyYW5zYWN0aW9uQmFja2VuZCosIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmQ+ID4gbV90cmFuc2FjdGlvbnM7Ci0gICAgLy8gVHJhbnNhY3Rpb25z
IGluIGRpZmZlcmVudCBzdGF0ZXMgYXJlIGdyb3VwZWQgYmVsb3cuCi0gICAgTGlzdEhhc2hTZXQ8
SURCVHJhbnNhY3Rpb25CYWNrZW5kKj4gbV9xdWV1ZWRUcmFuc2FjdGlvbnM7Ci0gICAgSGFzaFNl
dDxJREJUcmFuc2FjdGlvbkJhY2tlbmQqPiBtX3N0YXJ0ZWRUcmFuc2FjdGlvbnM7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLQotI2VuZGlmIC8vIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUFueS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5QW55LmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTIyYTJlNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5QW55LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDI2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkxlZ2FjeUFueS5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNs
dWRlICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAiSURCS2V5UGF0aC5oIgotI2luY2x1ZGUg
IkxlZ2FjeUN1cnNvcldpdGhWYWx1ZS5oIgotI2luY2x1ZGUgIkxlZ2FjeURhdGFiYXNlLmgiCi0j
aW5jbHVkZSAiTGVnYWN5RmFjdG9yeS5oIgotI2luY2x1ZGUgIkxlZ2FjeUluZGV4LmgiCi0jaW5j
bHVkZSAiTGVnYWN5T2JqZWN0U3RvcmUuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWZQ
dHI8TGVnYWN5QW55PiBMZWdhY3lBbnk6OmNyZWF0ZUludmFsaWQoKQotewotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTGVnYWN5QW55KFR5cGU6OlVuZGVmaW5lZCkpOwotfQotCi1SZWZQdHI8TGVn
YWN5QW55PiBMZWdhY3lBbnk6OmNyZWF0ZU51bGwoKQotewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTGVnYWN5QW55KFR5cGU6Ok51bGwpKTsKLX0KLQotUmVmUHRyPExlZ2FjeUFueT4gTGVnYWN5
QW55OjpjcmVhdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IExlZ2FjeUFueSh2YWx1ZSkpOwotfQotCi1MZWdhY3lBbnk6OkxlZ2FjeUFueShU
eXBlIHR5cGUpCi0gICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1faW50ZWdlcigwKQotewotICAg
IEFTU0VSVCh0eXBlID09IFR5cGU6OlVuZGVmaW5lZCB8fCB0eXBlID09IFR5cGU6Ok51bGwpOwot
fQotCi1MZWdhY3lBbnk6On5MZWdhY3lBbnkoKQotewotfQotCi1SZWZQdHI8RE9NU3RyaW5nTGlz
dD4gTGVnYWN5QW55Ojpkb21TdHJpbmdMaXN0KCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFR5
cGU6OkRPTVN0cmluZ0xpc3QpOwotICAgIHJldHVybiBtX2RvbVN0cmluZ0xpc3Q7Ci19Ci0KLVJl
ZlB0cjxJREJDdXJzb3I+IExlZ2FjeUFueTo6aWRiQ3Vyc29yKCkKLXsKLSAgICBBU1NFUlQobV90
eXBlID09IFR5cGU6OklEQkN1cnNvcik7Ci0gICAgcmV0dXJuIG1faWRiQ3Vyc29yOwotfQotCi1S
ZWZQdHI8SURCQ3Vyc29yV2l0aFZhbHVlPiBMZWdhY3lBbnk6OmlkYkN1cnNvcldpdGhWYWx1ZSgp
Ci17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpJREJDdXJzb3JXaXRoVmFsdWUpOwotICAg
IHJldHVybiBtX2lkYkN1cnNvcldpdGhWYWx1ZTsKLX0KLQotUmVmUHRyPElEQkRhdGFiYXNlPiBM
ZWdhY3lBbnk6OmlkYkRhdGFiYXNlKCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFR5cGU6OklE
QkRhdGFiYXNlKTsKLSAgICByZXR1cm4gbV9pZGJEYXRhYmFzZTsKLX0KLQotUmVmUHRyPElEQkZh
Y3Rvcnk+IExlZ2FjeUFueTo6aWRiRmFjdG9yeSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBU
eXBlOjpJREJGYWN0b3J5KTsKLSAgICByZXR1cm4gbV9pZGJGYWN0b3J5OwotfQotCi1SZWZQdHI8
SURCSW5kZXg+IExlZ2FjeUFueTo6aWRiSW5kZXgoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0g
VHlwZTo6SURCSW5kZXgpOwotICAgIHJldHVybiBtX2lkYkluZGV4OwotfQotCi1SZWZQdHI8SURC
T2JqZWN0U3RvcmU+IExlZ2FjeUFueTo6aWRiT2JqZWN0U3RvcmUoKQotewotICAgIEFTU0VSVCht
X3R5cGUgPT0gVHlwZTo6SURCT2JqZWN0U3RvcmUpOwotICAgIHJldHVybiBtX2lkYk9iamVjdFN0
b3JlOwotfQotCi1SZWZQdHI8SURCVHJhbnNhY3Rpb24+IExlZ2FjeUFueTo6aWRiVHJhbnNhY3Rp
b24oKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6SURCVHJhbnNhY3Rpb24pOwotICAg
IHJldHVybiBtX2lkYlRyYW5zYWN0aW9uOwotfQotCi1jb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYgTGVnYWN5QW55OjpzY3JpcHRWYWx1ZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBU
eXBlOjpTY3JpcHRWYWx1ZSk7Ci0gICAgcmV0dXJuIG1fc2NyaXB0VmFsdWU7Ci19Ci0KLWNvbnN0
IFN0cmluZyYgTGVnYWN5QW55OjpzdHJpbmcoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gVHlw
ZTo6U3RyaW5nKTsKLSAgICByZXR1cm4gbV9zdHJpbmc7Ci19Ci0KLWludDY0X3QgTGVnYWN5QW55
OjppbnRlZ2VyKCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFR5cGU6OkludGVnZXIpOwotICAg
IHJldHVybiBtX2ludGVnZXI7Ci19Ci0KLUxlZ2FjeUFueTo6TGVnYWN5QW55KFJlZlB0cjxET01T
dHJpbmdMaXN0PiB2YWx1ZSkKLSAgICA6IG1fdHlwZShUeXBlOjpET01TdHJpbmdMaXN0KQotICAg
ICwgbV9kb21TdHJpbmdMaXN0KHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0KLUxl
Z2FjeUFueTo6TGVnYWN5QW55KFJlZlB0cjxMZWdhY3lDdXJzb3JXaXRoVmFsdWU+IHZhbHVlKQot
ICAgIDogbV90eXBlKFR5cGU6OklEQkN1cnNvcldpdGhWYWx1ZSkKLSAgICAsIG1faWRiQ3Vyc29y
V2l0aFZhbHVlKHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0KLUxlZ2FjeUFueTo6
TGVnYWN5QW55KFJlZlB0cjxMZWdhY3lDdXJzb3I+IHZhbHVlKQotICAgIDogbV90eXBlKFR5cGU6
OklEQkN1cnNvcikKLSAgICAsIG1faWRiQ3Vyc29yKHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDAp
Ci17Ci19Ci0KLUxlZ2FjeUFueTo6TGVnYWN5QW55KFJlZlB0cjxMZWdhY3lEYXRhYmFzZT4gdmFs
dWUpCi0gICAgOiBtX3R5cGUoVHlwZTo6SURCRGF0YWJhc2UpCi0gICAgLCBtX2lkYkRhdGFiYXNl
KHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0KLUxlZ2FjeUFueTo6TGVnYWN5QW55
KFJlZlB0cjxMZWdhY3lGYWN0b3J5PiB2YWx1ZSkKLSAgICA6IG1fdHlwZShUeXBlOjpJREJGYWN0
b3J5KQotICAgICwgbV9pZGJGYWN0b3J5KHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19
Ci0KLUxlZ2FjeUFueTo6TGVnYWN5QW55KFJlZlB0cjxMZWdhY3lJbmRleD4gdmFsdWUpCi0gICAg
OiBtX3R5cGUoVHlwZTo6SURCSW5kZXgpCi0gICAgLCBtX2lkYkluZGV4KHZhbHVlKQotICAgICwg
bV9pbnRlZ2VyKDApCi17Ci19Ci0KLUxlZ2FjeUFueTo6TGVnYWN5QW55KFJlZlB0cjxMZWdhY3lU
cmFuc2FjdGlvbj4gdmFsdWUpCi0gICAgOiBtX3R5cGUoVHlwZTo6SURCVHJhbnNhY3Rpb24pCi0g
ICAgLCBtX2lkYlRyYW5zYWN0aW9uKHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0K
LUxlZ2FjeUFueTo6TGVnYWN5QW55KFJlZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4gdmFsdWUpCi0g
ICAgOiBtX3R5cGUoVHlwZTo6SURCT2JqZWN0U3RvcmUpCi0gICAgLCBtX2lkYk9iamVjdFN0b3Jl
KHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0KLUxlZ2FjeUFueTo6TGVnYWN5QW55
KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSkKLSAgICA6IG1fdHlwZShUeXBl
OjpTY3JpcHRWYWx1ZSkKLSAgICAsIG1fc2NyaXB0VmFsdWUodmFsdWUpCi0gICAgLCBtX2ludGVn
ZXIoMCkKLXsKLX0KLQotTGVnYWN5QW55OjpMZWdhY3lBbnkoY29uc3QgSURCS2V5UGF0aCYgdmFs
dWUpCi0gICAgOiBtX3R5cGUoVHlwZTo6S2V5UGF0aCkKLSAgICAsIG1faWRiS2V5UGF0aCh2YWx1
ZSkKLSAgICAsIG1faW50ZWdlcigwKQotewotfQotCi1MZWdhY3lBbnk6OkxlZ2FjeUFueShjb25z
dCBTdHJpbmcmIHZhbHVlKQotICAgIDogbV90eXBlKFR5cGU6OlN0cmluZykKLSAgICAsIG1fc3Ry
aW5nKHZhbHVlKQotICAgICwgbV9pbnRlZ2VyKDApCi17Ci19Ci0KLUxlZ2FjeUFueTo6TGVnYWN5
QW55KGludDY0X3QgdmFsdWUpCi0gICAgOiBtX3R5cGUoVHlwZTo6SW50ZWdlcikKLSAgICAsIG1f
aW50ZWdlcih2YWx1ZSkKLXsKLX0KLQotTGVnYWN5Q3Vyc29yKiBMZWdhY3lBbnk6OmxlZ2FjeUN1
cnNvcigpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBUeXBlOjpJREJDdXJzb3IpOwotICAgIHJl
dHVybiBtX2lkYkN1cnNvci5nZXQoKTsKLX0KLQotTGVnYWN5Q3Vyc29yV2l0aFZhbHVlKiBMZWdh
Y3lBbnk6OmxlZ2FjeUN1cnNvcldpdGhWYWx1ZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBU
eXBlOjpJREJDdXJzb3JXaXRoVmFsdWUpOwotICAgIHJldHVybiBtX2lkYkN1cnNvcldpdGhWYWx1
ZS5nZXQoKTsKLX0KLQotTGVnYWN5RGF0YWJhc2UqIExlZ2FjeUFueTo6bGVnYWN5RGF0YWJhc2Uo
KQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6SURCRGF0YWJhc2UpOwotICAgIHJldHVy
biBtX2lkYkRhdGFiYXNlLmdldCgpOwotfQotCi1MZWdhY3lGYWN0b3J5KiBMZWdhY3lBbnk6Omxl
Z2FjeUZhY3RvcnkoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6SURCRmFjdG9yeSk7
Ci0gICAgcmV0dXJuIG1faWRiRmFjdG9yeS5nZXQoKTsKLX0KLQotTGVnYWN5SW5kZXgqIExlZ2Fj
eUFueTo6bGVnYWN5SW5kZXgoKQotewotICAgIEFTU0VSVChtX3R5cGUgPT0gVHlwZTo6SURCSW5k
ZXgpOwotICAgIHJldHVybiBtX2lkYkluZGV4LmdldCgpOwotfQotCi1MZWdhY3lPYmplY3RTdG9y
ZSogTGVnYWN5QW55OjpsZWdhY3lPYmplY3RTdG9yZSgpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9
PSBUeXBlOjpJREJPYmplY3RTdG9yZSk7Ci0gICAgcmV0dXJuIG1faWRiT2JqZWN0U3RvcmUuZ2V0
KCk7Ci19Ci0KLUxlZ2FjeVRyYW5zYWN0aW9uKiBMZWdhY3lBbnk6OmxlZ2FjeVRyYW5zYWN0aW9u
KCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFR5cGU6OklEQlRyYW5zYWN0aW9uKTsKLSAgICBy
ZXR1cm4gbV9pZGJUcmFuc2FjdGlvbi5nZXQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lBbnkuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lBbnkuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNmMyOWYyNi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5QW55LmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTGVnYWN5QW55X2gKLSNkZWZpbmUgTGVnYWN5
QW55X2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCQW55
LmgiCi0jaW5jbHVkZSAiSURCS2V5UGF0aC5oIgotI2luY2x1ZGUgIlNjcmlwdFdyYXBwYWJsZS5o
IgotI2luY2x1ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBET01TdHJpbmdMaXN0OwotY2xhc3MgSURCQ3Vyc29yOwotY2xhc3MgSURC
Q3Vyc29yV2l0aFZhbHVlOwotY2xhc3MgSURCRGF0YWJhc2U7Ci1jbGFzcyBJREJGYWN0b3J5Owot
Y2xhc3MgSURCSW5kZXg7Ci1jbGFzcyBJREJLZXlQYXRoOwotY2xhc3MgSURCT2JqZWN0U3RvcmU7
Ci1jbGFzcyBJREJUcmFuc2FjdGlvbjsKLQotY2xhc3MgTGVnYWN5Q3Vyc29yOwotY2xhc3MgTGVn
YWN5Q3Vyc29yV2l0aFZhbHVlOwotY2xhc3MgTGVnYWN5RGF0YWJhc2U7Ci1jbGFzcyBMZWdhY3lG
YWN0b3J5OwotY2xhc3MgTGVnYWN5SW5kZXg7Ci1jbGFzcyBMZWdhY3lPYmplY3RTdG9yZTsKLWNs
YXNzIExlZ2FjeVRyYW5zYWN0aW9uOwotCi1jbGFzcyBMZWdhY3lBbnkgOiBwdWJsaWMgSURCQW55
IHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPExlZ2FjeUFueT4gY3JlYXRlSW52YWxpZCgp
OwotICAgIHN0YXRpYyBSZWZQdHI8TGVnYWN5QW55PiBjcmVhdGVOdWxsKCk7Ci0gICAgc3RhdGlj
IFJlZlB0cjxMZWdhY3lBbnk+IGNyZWF0ZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgotICAgIHN0YXRpYyBSZWZQdHI8TGVnYWN5QW55PiBjcmVhdGUoVCog
aWRiT2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZWdhY3lBbnko
aWRiT2JqZWN0KSk7Ci0gICAgfQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgc3RhdGlj
IFJlZlB0cjxMZWdhY3lBbnk+IGNyZWF0ZShjb25zdCBUJiBpZGJPYmplY3QpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExlZ2FjeUFueShpZGJPYmplY3QpKTsKLSAgICB9Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBzdGF0aWMgUmVmUHRyPExlZ2FjeUFueT4gY3Jl
YXRlKFBhc3NSZWZQdHI8VD4gaWRiT2JqZWN0KQotICAgIHsKLSAgICAgICAgUmVmUHRyPFQ+IHJl
Zk9iamVjdCA9IGlkYk9iamVjdDsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZWdhY3lB
bnkoV1RGTW92ZShyZWZPYmplY3QpKSk7Ci0gICAgfQotICAgIHN0YXRpYyBSZWZQdHI8TGVnYWN5
QW55PiBjcmVhdGUoaW50NjRfdCB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTGVnYWN5QW55KHZhbHVlKSk7Ci0gICAgfQotICAgIH5MZWdhY3lBbnkoKTsKLQotICAg
IC8vIEZJWE1FOiBUaGlzIGlzIGEgdGVtcG9yYXJ5IGhhY2sgdG8gYWxsb3cgY2FzdHMgaW4gV2Vi
SW5zcGVjdG9yIGNvZGUgd2hpbGUgTW9kZXJuIElEQiBhbmQgTGVnYWN5IElEQiBsaXZlIHNpZGUt
Ynktc2lkZS4KLSAgICAvLyBJdCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHRoZSBsZWdhY3kgaW1w
bGVtZW50YXRpb24gaXMgcmVtb3ZlZCBhcyBwYXJ0IG9mIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDkxMTcKLSAgICB2aXJ0dWFsIGJvb2wgaXNMZWdhY3koKSBjb25z
dCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2aXJ0dWFsIFR5cGUgdHlw
ZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIC8vIFVzZSB0
eXBlKCkgdG8gZmlndXJlIG91dCB3aGljaCBvbmUgb2YgdGhlc2UgeW91J3JlIGFsbG93ZWQgdG8g
Y2FsbC4KLSAgICB2aXJ0dWFsIFJlZlB0cjxET01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KCkg
b3ZlcnJpZGUgZmluYWw7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCQ3Vyc29yPiBpZGJDdXJzb3Io
KSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJDdXJzb3JXaXRoVmFsdWU+
IGlkYkN1cnNvcldpdGhWYWx1ZSgpIG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgUmVmUHRy
PElEQkRhdGFiYXNlPiBpZGJEYXRhYmFzZSgpIG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwg
UmVmUHRyPElEQkZhY3Rvcnk+IGlkYkZhY3RvcnkoKSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0
dWFsIFJlZlB0cjxJREJJbmRleD4gaWRiSW5kZXgoKSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0
dWFsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gaWRiT2JqZWN0U3RvcmUoKSBvdmVycmlkZSBmaW5h
bDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24oKSBv
dmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVl
JiBzY3JpcHRWYWx1ZSgpIG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgaW50NjRfdCBpbnRl
Z2VyKCkgb3ZlcnJpZGUgZmluYWw7Ci0gICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIHN0cmluZygp
IG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCgp
IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1faWRiS2V5UGF0aDsgfTsKLQotICAgIExlZ2FjeUN1
cnNvciogbGVnYWN5Q3Vyc29yKCk7Ci0gICAgTGVnYWN5Q3Vyc29yV2l0aFZhbHVlKiBsZWdhY3lD
dXJzb3JXaXRoVmFsdWUoKTsKLSAgICBMZWdhY3lEYXRhYmFzZSogbGVnYWN5RGF0YWJhc2UoKTsK
LSAgICBMZWdhY3lGYWN0b3J5KiBsZWdhY3lGYWN0b3J5KCk7Ci0gICAgTGVnYWN5SW5kZXgqIGxl
Z2FjeUluZGV4KCk7Ci0gICAgTGVnYWN5T2JqZWN0U3RvcmUqIGxlZ2FjeU9iamVjdFN0b3JlKCk7
Ci0gICAgTGVnYWN5VHJhbnNhY3Rpb24qIGxlZ2FjeVRyYW5zYWN0aW9uKCk7Ci0KLXByaXZhdGU6
Ci0gICAgZXhwbGljaXQgTGVnYWN5QW55KFR5cGUpOwotICAgIGV4cGxpY2l0IExlZ2FjeUFueShS
ZWZQdHI8RE9NU3RyaW5nTGlzdD4pOwotICAgIGV4cGxpY2l0IExlZ2FjeUFueShSZWZQdHI8TGVn
YWN5Q3Vyc29yPik7Ci0gICAgZXhwbGljaXQgTGVnYWN5QW55KFJlZlB0cjxMZWdhY3lDdXJzb3JX
aXRoVmFsdWU+KTsKLSAgICBleHBsaWNpdCBMZWdhY3lBbnkoUmVmUHRyPExlZ2FjeURhdGFiYXNl
Pik7Ci0gICAgZXhwbGljaXQgTGVnYWN5QW55KFJlZlB0cjxMZWdhY3lGYWN0b3J5Pik7Ci0gICAg
ZXhwbGljaXQgTGVnYWN5QW55KFJlZlB0cjxMZWdhY3lJbmRleD4pOwotICAgIGV4cGxpY2l0IExl
Z2FjeUFueShSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+KTsKLSAgICBleHBsaWNpdCBMZWdhY3lB
bnkoUmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPik7Ci0gICAgZXhwbGljaXQgTGVnYWN5QW55KGNv
bnN0IElEQktleVBhdGgmKTsKLSAgICBleHBsaWNpdCBMZWdhY3lBbnkoY29uc3QgU3RyaW5nJik7
Ci0gICAgZXhwbGljaXQgTGVnYWN5QW55KGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJik7
Ci0gICAgZXhwbGljaXQgTGVnYWN5QW55KGludDY0X3QpOwotCi0gICAgY29uc3QgVHlwZSBtX3R5
cGU7Ci0KLSAgICAvLyBPbmx5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHNob3VsZCBldmVyIGJlIGlu
IHVzZSBhdCBhbnkgZ2l2ZW4gdGltZS4KLSAgICBjb25zdCBSZWZQdHI8RE9NU3RyaW5nTGlzdD4g
bV9kb21TdHJpbmdMaXN0OwotICAgIGNvbnN0IFJlZlB0cjxMZWdhY3lDdXJzb3I+IG1faWRiQ3Vy
c29yOwotICAgIGNvbnN0IFJlZlB0cjxMZWdhY3lDdXJzb3JXaXRoVmFsdWU+IG1faWRiQ3Vyc29y
V2l0aFZhbHVlOwotICAgIGNvbnN0IFJlZlB0cjxMZWdhY3lEYXRhYmFzZT4gbV9pZGJEYXRhYmFz
ZTsKLSAgICBjb25zdCBSZWZQdHI8TGVnYWN5RmFjdG9yeT4gbV9pZGJGYWN0b3J5OwotICAgIGNv
bnN0IFJlZlB0cjxMZWdhY3lJbmRleD4gbV9pZGJJbmRleDsKLSAgICBjb25zdCBSZWZQdHI8TGVn
YWN5T2JqZWN0U3RvcmU+IG1faWRiT2JqZWN0U3RvcmU7Ci0gICAgY29uc3QgUmVmUHRyPExlZ2Fj
eVRyYW5zYWN0aW9uPiBtX2lkYlRyYW5zYWN0aW9uOwotICAgIGNvbnN0IElEQktleVBhdGggbV9p
ZGJLZXlQYXRoOwotICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fc2NyaXB0VmFs
dWU7Ci0gICAgY29uc3QgU3RyaW5nIG1fc3RyaW5nOwotICAgIGNvbnN0IGludDY0X3QgbV9pbnRl
Z2VyOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKElO
REVYRURfREFUQUJBU0UpCi0KLSNlbmRpZiAvLyBMZWdhY3lBbnlfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMzOTlkMS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDI3NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkxlZ2FjeUN1cnNvci5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
Ci0KLSNpbmNsdWRlICJJREJBbnkuaCIKLSNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiSURCQ2FsbGJhY2tzLmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZC5o
IgotI2luY2x1ZGUgIklEQktleS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCi0jaW5j
bHVkZSAiSURCVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJMZWdhY3lSZXF1ZXN0LmgiCi0jaW5j
bHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNp
bmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+Ci0jaW5jbHVkZSA8bGltaXRzPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxMZWdhY3lDdXJzb3I+IExlZ2FjeUN1cnNvcjo6
Y3JlYXRlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4gYmFja2VuZCwgSW5kZXhlZERCOjpD
dXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBMZWdhY3lSZXF1ZXN0KiByZXF1ZXN0LCBMZWdhY3lB
bnkqIHNvdXJjZSwgTGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IExlZ2FjeUN1cnNvcihiYWNrZW5kLCBkaXJlY3Rpb24sIHJlcXVlc3Qs
IHNvdXJjZSwgdHJhbnNhY3Rpb24pKTsKLX0KLQotTGVnYWN5Q3Vyc29yOjpMZWdhY3lDdXJzb3Io
UGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiBiYWNrZW5kLCBJbmRleGVkREI6OkN1cnNvckRp
cmVjdGlvbiBkaXJlY3Rpb24sIExlZ2FjeVJlcXVlc3QqIHJlcXVlc3QsIExlZ2FjeUFueSogc291
cmNlLCBMZWdhY3lUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAgOiBtX2JhY2tlbmQoYmFj
a2VuZCkKLSAgICAsIG1fcmVxdWVzdChyZXF1ZXN0KQotICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0
aW9uKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90cmFuc2FjdGlvbih0cmFuc2Fj
dGlvbikKLSAgICAsIG1fdHJhbnNhY3Rpb25Ob3RpZmllcih0cmFuc2FjdGlvbiwgdGhpcykKLSAg
ICAsIG1fZ290VmFsdWUoZmFsc2UpCi17Ci0gICAgQVNTRVJUKG1fYmFja2VuZCk7Ci0gICAgQVNT
RVJUKG1fcmVxdWVzdCk7Ci0gICAgQVNTRVJUKG1fc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpU
eXBlOjpJREJPYmplY3RTdG9yZSB8fCBtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6VHlwZTo6
SURCSW5kZXgpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKLX0KLQotTGVnYWN5Q3Vyc29y
Ojp+TGVnYWN5Q3Vyc29yKCkKLXsKLX0KLQotY29uc3QgU3RyaW5nJiBMZWdhY3lDdXJzb3I6OmRp
cmVjdGlvbigpIGNvbnN0Ci17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lDdXJzb3I6OmRp
cmVjdGlvbiIpOwotICAgIHJldHVybiBkaXJlY3Rpb25Ub1N0cmluZyhtX2RpcmVjdGlvbik7Ci19
Ci0KLWNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBMZWdhY3lDdXJzb3I6OmtleSgpIGNv
bnN0Ci17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lDdXJzb3I6OmtleSIpOwotICAgIHJl
dHVybiBtX2N1cnJlbnRLZXlWYWx1ZTsKLX0KLQotY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFs
dWUmIExlZ2FjeUN1cnNvcjo6cHJpbWFyeUtleSgpIGNvbnN0Ci17Ci0gICAgTE9HKFN0b3JhZ2VB
UEksICJMZWdhY3lDdXJzb3I6OnByaW1hcnlLZXkiKTsKLSAgICByZXR1cm4gbV9jdXJyZW50UHJp
bWFyeUtleVZhbHVlOwotfQotCi1jb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgTGVnYWN5
Q3Vyc29yOjp2YWx1ZSgpIGNvbnN0Ci17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lDdXJz
b3I6OnZhbHVlIik7Ci0gICAgcmV0dXJuIG1fY3VycmVudFZhbHVlOwotfQotCi1JREJBbnkqIExl
Z2FjeUN1cnNvcjo6c291cmNlKCkKLXsKLSAgICByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7Ci19Ci0K
LVJlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lDdXJzb3I6OnVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYg
c3RhdGUsIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUN1cnNvcjo6dXBkYXRl
Iik7Ci0KLSAgICBpZiAoIW1fZ290VmFsdWUgfHwgaXNLZXlDdXJzb3IoKSkgewotICAgICAgICBl
Yy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7
Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFj
dGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG1fdHJhbnNhY3Rp
b24tPmlzUmVhZE9ubHkoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlJlYWRPbmx5RXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFJlZlB0
cjxMZWdhY3lPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBlZmZlY3RpdmVPYmplY3RTdG9yZSgp
OwotICAgIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGggPSBvYmplY3RTdG9yZS0+bWV0YWRhdGEo
KS5rZXlQYXRoOwotICAgIGNvbnN0IGJvb2wgdXNlc0luTGluZUtleXMgPSAha2V5UGF0aC5pc051
bGwoKTsKLSAgICBpZiAodXNlc0luTGluZUtleXMpIHsKLSAgICAgICAgUmVmUHRyPElEQktleT4g
a2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgobV9yZXF1
ZXN0LT5yZXF1ZXN0U3RhdGUoKS0+ZXhlYygpLCB2YWx1ZSwga2V5UGF0aCk7Ci0gICAgICAgIGlm
ICgha2V5UGF0aEtleSB8fCAha2V5UGF0aEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5
LmdldCgpKSkgewotICAgICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
YXRhRXJyb3I7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiBvYmplY3RTdG9yZS0+cHV0KElEQkRhdGFiYXNlQmFja2VuZDo6Q3Vyc29yVXBkYXRl
LCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwgc3RhdGUsIHZhbHVlLCBtX2N1cnJlbnRQcmltYXJ5
S2V5LCBlYyk7Ci19Ci0KLXZvaWQgTGVnYWN5Q3Vyc29yOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcg
Y291bnQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgZWMuY29kZSA9IDA7
Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lDdXJzb3I6OmFkdmFuY2UiKTsKLSAgICBpZiAo
IW1fZ290VmFsdWUpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
bnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV90
cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmICghY291bnQpIHsKLSAgICAgICAgZWMuY29kZSA9IFR5cGVFcnJvcjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fcmVxdWVzdC0+c2V0UGVuZGluZ0N1cnNvcih0
aGlzKTsKLSAgICBtX2dvdFZhbHVlID0gZmFsc2U7Ci0gICAgbV9iYWNrZW5kLT5hZHZhbmNlKGNv
dW50LCBtX3JlcXVlc3QsIGVjLmNvZGUpOwotICAgIEFTU0VSVCghZWMuY29kZSk7Ci19Ci0KLXZv
aWQgTGVnYWN5Q3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXlWYWx1ZSwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBET01SZXF1ZXN0U3RhdGUgcmVxdWVzdFN0
YXRlKGNvbnRleHQpOwotICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHNjcmlwdFZhbHVlVG9JREJL
ZXkoJnJlcXVlc3RTdGF0ZSwga2V5VmFsdWUpOwotICAgIGNvbnRpbnVlRnVuY3Rpb24oa2V5LnJl
bGVhc2UoKSwgZWMpOwotfQotCi12b2lkIExlZ2FjeUN1cnNvcjo6Y29udGludWVGdW5jdGlvbihQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewot
ICAgIGVjLmNvZGUgPSAwOwotICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5Q3Vyc29yOjpjb250
aW51ZSIpOwotICAgIGlmIChrZXkgJiYgIWtleS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVj
LmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9yOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX2dvdFZhbHVlKSB7Ci0gICAgICAg
IGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoa2V5KSB7Ci0gICAgICAgIEFTU0VSVChtX2N1
cnJlbnRLZXkpOwotICAgICAgICBpZiAobV9kaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb246Ok5leHQgfHwgbV9kaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rp
b246Ok5leHROb0R1cGxpY2F0ZSkgewotICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRLZXktPmlz
TGVzc1RoYW4oa2V5LmdldCgpKSkgewotICAgICAgICAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICgha2V5LT5pc0xlc3NU
aGFuKG1fY3VycmVudEtleS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBlYy5jb2RlID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogV2UncmUgbm90
IHVzaW5nIHRoZSBjb250ZXh0IGZyb20gd2hlbiBjb250aW51ZSB3YXMgY2FsbGVkLCB3aGljaCBt
ZWFucyB0aGUgY2FsbGJhY2sKLSAgICAvLyAgICAgICAgd2lsbCBiZSBvbiB0aGUgb3JpZ2luYWwg
Y29udGV4dCBvcGVuQ3Vyc29yIHdhcyBjYWxsZWQgb24uIElzIHRoaXMgcmlnaHQ/Ci0gICAgbV9y
ZXF1ZXN0LT5zZXRQZW5kaW5nQ3Vyc29yKHRoaXMpOwotICAgIG1fZ290VmFsdWUgPSBmYWxzZTsK
LSAgICBtX2JhY2tlbmQtPmNvbnRpbnVlRnVuY3Rpb24oa2V5LCBtX3JlcXVlc3QsIGVjLmNvZGUp
OwotICAgIEFTU0VSVCghZWMuY29kZSk7Ci19Ci0KLVJlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lD
dXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgZWMuY29kZSA9IDA7Ci0gICAgTE9H
KFN0b3JhZ2VBUEksICJMZWdhY3lDdXJzb3I6OmRlbGV0ZSIpOwotICAgIGlmICghbV90cmFuc2Fj
dGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
ICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICBpZiAoIW1fZ290VmFsdWUgfHwgaXNLZXlDdXJzb3IoKSkgewotICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgUmVmUHRyPExlZ2FjeVJlcXVlc3Q+IHJlcXVlc3Qg
PSBMZWdhY3lSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rpb24ocmVx
dWVzdCwgZWMuY29kZSk7Ci0gICAgQVNTRVJUKCFlYy5jb2RlKTsKLSAgICByZXR1cm4gcmVxdWVz
dC5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQgTGVnYWN5Q3Vyc29yOjpwb3N0U3VjY2Vzc0hhbmRsZXJD
YWxsYmFjaygpCi17Ci0gICAgbV9iYWNrZW5kLT5wb3N0U3VjY2Vzc0hhbmRsZXJDYWxsYmFjaygp
OwotfQotCi12b2lkIExlZ2FjeUN1cnNvcjo6Y2xvc2UoKQotewotICAgIG1fdHJhbnNhY3Rpb25O
b3RpZmllci5jdXJzb3JGaW5pc2hlZCgpOwotICAgIGlmIChtX3JlcXVlc3QpIHsKLSAgICAgICAg
bV9yZXF1ZXN0LT5maW5pc2hDdXJzb3IoKTsKLSAgICAgICAgbV9yZXF1ZXN0ID0gbnVsbHB0cjsK
LSAgICB9Ci19Ci0KLXZvaWQgTGVnYWN5Q3Vyc29yOjpzZXRWYWx1ZVJlYWR5KERPTVJlcXVlc3RT
dGF0ZSogc3RhdGUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCS2V5PiBw
cmltYXJ5S2V5LCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUpCi17Ci0gICAgbV9jdXJy
ZW50S2V5ID0ga2V5OwotICAgIG1fY3VycmVudEtleVZhbHVlID0gaWRiS2V5VG9TY3JpcHRWYWx1
ZShzdGF0ZSwgbV9jdXJyZW50S2V5KTsKLQotICAgIG1fY3VycmVudFByaW1hcnlLZXkgPSBwcmlt
YXJ5S2V5OwotICAgIG1fY3VycmVudFByaW1hcnlLZXlWYWx1ZSA9IGlkYktleVRvU2NyaXB0VmFs
dWUoc3RhdGUsIG1fY3VycmVudFByaW1hcnlLZXkpOwotCi0gICAgaWYgKCFpc0tleUN1cnNvcigp
KSB7Ci0gICAgICAgIFJlZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBlZmZl
Y3RpdmVPYmplY3RTdG9yZSgpOwotICAgICAgICBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
IG1ldGFkYXRhID0gb2JqZWN0U3RvcmUtPm1ldGFkYXRhKCk7Ci0gICAgICAgIGlmIChtZXRhZGF0
YS5hdXRvSW5jcmVtZW50ICYmICFtZXRhZGF0YS5rZXlQYXRoLmlzTnVsbCgpKSB7Ci0jaWZuZGVm
IE5ERUJVRwotICAgICAgICAgICAgUmVmUHRyPElEQktleT4gZXhwZWN0ZWRLZXkgPSBjcmVhdGVJ
REJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKG1fcmVxdWVzdC0+cmVxdWVzdFN0YXRlKCkt
PmV4ZWMoKSwgdmFsdWUsIG1ldGFkYXRhLmtleVBhdGgpOwotICAgICAgICAgICAgQVNTRVJUKCFl
eHBlY3RlZEtleSB8fCBleHBlY3RlZEtleS0+aXNFcXVhbChtX2N1cnJlbnRQcmltYXJ5S2V5Lmdl
dCgpKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJvb2wgaW5qZWN0ZWQgPSBpbmplY3RJREJLZXlJ
bnRvU2NyaXB0VmFsdWUobV9yZXF1ZXN0LT5yZXF1ZXN0U3RhdGUoKSwgbV9jdXJyZW50UHJpbWFy
eUtleSwgdmFsdWUsIG1ldGFkYXRhLmtleVBhdGgpOwotICAgICAgICAgICAgLy8gRklYTUU6IFRo
ZXJlIGlzIG5vIHdheSB0byByZXBvcnQgZXJyb3JzIGhlcmUuIE1vdmUgdGhpcyBpbnRvIG9uU3Vj
Y2Vzc1dpdGhDb250aW51YXRpb24gc28gdGhhdCB3ZSBjYW4gYWJvcnQgdGhlIHRyYW5zYWN0aW9u
IHRoZXJlLiBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjI3
OAotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChpbmplY3RlZCwgaW5qZWN0ZWQpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIG1fY3VycmVudFZhbHVlID0gdmFsdWU7Ci0KLSAgICBtX2dvdFZhbHVl
ID0gdHJ1ZTsKLX0KLQotUGFzc1JlZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4gTGVnYWN5Q3Vyc29y
OjplZmZlY3RpdmVPYmplY3RTdG9yZSgpCi17Ci0gICAgaWYgKG1fc291cmNlLT50eXBlKCkgPT0g
SURCQW55OjpUeXBlOjpJREJPYmplY3RTdG9yZSkKLSAgICAgICAgcmV0dXJuIG1fc291cmNlLT5s
ZWdhY3lPYmplY3RTdG9yZSgpOwotICAgIFJlZlB0cjxMZWdhY3lJbmRleD4gaW5kZXggPSBtX3Nv
dXJjZS0+bGVnYWN5SW5kZXgoKTsKLSAgICByZXR1cm4gaW5kZXgtPmxlZ2FjeU9iamVjdFN0b3Jl
KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0xlZ2FjeUN1cnNvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0xlZ2FjeUN1cnNvci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0
NmUwYjQyLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xl
Z2FjeS9MZWdhY3lDdXJzb3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBMZWdhY3lDdXJzb3JfaAotI2RlZmluZSBMZWdhY3lDdXJzb3JfaAotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWUu
aCIKLSNpbmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJbmRleGVkREIuaCIKLSNpbmNsdWRl
ICJMZWdhY3lPYmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIkxlZ2FjeVRyYW5zYWN0aW9uLmgiCi0j
aW5jbHVkZSAiU2NyaXB0V3JhcHBhYmxlLmgiCi0jaW5jbHVkZSA8YmluZGluZ3MvU2NyaXB0VmFs
dWUuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBET01SZXF1ZXN0U3RhdGU7Ci1jbGFz
cyBJREJBbnk7Ci1jbGFzcyBJREJDYWxsYmFja3M7Ci1jbGFzcyBJREJDdXJzb3JCYWNrZW5kOwot
Y2xhc3MgTGVnYWN5UmVxdWVzdDsKLWNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0KLXR5
cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0KLWNsYXNzIExlZ2FjeUN1cnNvciA6IHB1YmxpYyBJ
REJDdXJzb3JXaXRoVmFsdWUgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TGVnYWN5Q3Vyc29y
PiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kPiwgSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb24sIExlZ2FjeVJlcXVlc3QqLCBMZWdhY3lBbnkqIHNvdXJjZSwgTGVnYWN5VHJhbnNh
Y3Rpb24qKTsKLSAgICB2aXJ0dWFsIH5MZWdhY3lDdXJzb3IoKTsKLQotICAgIC8vIEltcGxlbWVu
dCB0aGUgSURMCi0gICAgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24oKSBjb25zdCBvdmVycmlkZTsK
LSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5KCkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHByaW1hcnlLZXkoKSBjb25zdCBv
dmVycmlkZTsKLSAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYgdmFsdWUoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBJREJBbnkqIHNvdXJjZSgpIG92ZXJyaWRlOwotCi0gICAgUmVmUHRy
PElEQlJlcXVlc3Q+IHVwZGF0ZShKU0M6OkV4ZWNTdGF0ZSYsIERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZHZh
bmNlKHVuc2lnbmVkIGxvbmcsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIG92ZXJyaWRlOwot
ICAgIC8vIEZJWE1FOiBUcnkgdG8gbW9kaWZ5IHRoZSBjb2RlIGdlbmVyYXRvciBzbyB0aGlzIG92
ZXJsb2FkIGlzIHVubmVlZGVkLgotICAgIHZvaWQgY29udGludWVGdW5jdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykgb3ZlcnJpZGUgeyBj
b250aW51ZUZ1bmN0aW9uKHN0YXRpY19jYXN0PElEQktleSo+KG51bGxwdHIpLCBlYyk7IH0KLSAg
ICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IERl
cHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIG92
ZXJyaWRlOwotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgb3ZlcnJpZGU7Ci0KLSAg
ICB2b2lkIGNvbnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmKTsKLSAgICB2b2lkIHBvc3RTdWNjZXNzSGFuZGxlckNhbGxiYWNrKCk7Ci0g
ICAgdm9pZCBjbG9zZSgpOwotICAgIHZvaWQgc2V0VmFsdWVSZWFkeShET01SZXF1ZXN0U3RhdGUq
LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5LCBEZXBy
ZWNhdGVkOjpTY3JpcHRWYWx1ZSYpOwotICAgIFBhc3NSZWZQdHI8SURCS2V5PiBpZGJQcmltYXJ5
S2V5KCkgeyByZXR1cm4gbV9jdXJyZW50UHJpbWFyeUtleTsgfQotCi0gICAgdmlydHVhbCBib29s
IGlzS2V5Q3Vyc29yKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcm90ZWN0
ZWQ6Ci0gICAgTGVnYWN5Q3Vyc29yKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4sIEluZGV4
ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBMZWdhY3lSZXF1ZXN0KiwgTGVnYWN5QW55KiBzb3VyY2Us
IExlZ2FjeVRyYW5zYWN0aW9uKik7Ci0KLXByaXZhdGU6Ci0gICAgUGFzc1JlZlB0cjxMZWdhY3lP
YmplY3RTdG9yZT4gZWZmZWN0aXZlT2JqZWN0U3RvcmUoKTsKLQotICAgIFJlZlB0cjxJREJDdXJz
b3JCYWNrZW5kPiBtX2JhY2tlbmQ7Ci0gICAgUmVmUHRyPExlZ2FjeVJlcXVlc3Q+IG1fcmVxdWVz
dDsKLSAgICBjb25zdCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKLSAg
ICBSZWZQdHI8TGVnYWN5QW55PiBtX3NvdXJjZTsKLSAgICBSZWZQdHI8TGVnYWN5VHJhbnNhY3Rp
b24+IG1fdHJhbnNhY3Rpb247Ci0gICAgTGVnYWN5VHJhbnNhY3Rpb246Ok9wZW5DdXJzb3JOb3Rp
ZmllciBtX3RyYW5zYWN0aW9uTm90aWZpZXI7Ci0gICAgYm9vbCBtX2dvdFZhbHVlOwotICAgIC8v
IFRoZXNlIHZhbHVlcyBhcmUgaGVsZCBiZWNhdXNlIG1fYmFja2VuZCBtYXkgYWR2YW5jZSB3aGls
ZSB0aGV5Ci0gICAgLy8gYXJlIHN0aWxsIHZhbGlkIGZvciB0aGUgY3VycmVudCBzdWNjZXNzIGhh
bmRsZXJzLgotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fY3VycmVudEtleVZhbHVlOwot
ICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIG1fY3VycmVudFByaW1hcnlLZXlWYWx1ZTsKLSAg
ICBSZWZQdHI8SURCS2V5PiBtX2N1cnJlbnRLZXk7Ci0gICAgUmVmUHRyPElEQktleT4gbV9jdXJy
ZW50UHJpbWFyeUtleTsKLSAgICBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSBtX2N1cnJlbnRWYWx1
ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBM
ZWdhY3lDdXJzb3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGVnYWN5L0xlZ2FjeUN1cnNvcldpdGhWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzFjZDExZC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmQuaCIKLSNpbmNsdWRlICJJREJL
ZXkuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPExlZ2FjeUN1cnNvcldp
dGhWYWx1ZT4gTGVnYWN5Q3Vyc29yV2l0aFZhbHVlOjpjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJz
b3JCYWNrZW5kPiBiYWNrZW5kLCBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24s
IExlZ2FjeVJlcXVlc3QqIHJlcXVlc3QsIExlZ2FjeUFueSogc291cmNlLCBMZWdhY3lUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24pCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBMZWdhY3lDdXJz
b3JXaXRoVmFsdWUoYmFja2VuZCwgZGlyZWN0aW9uLCByZXF1ZXN0LCBzb3VyY2UsIHRyYW5zYWN0
aW9uKSk7Ci19Ci0KLVBhc3NSZWZQdHI8TGVnYWN5Q3Vyc29yV2l0aFZhbHVlPiBMZWdhY3lDdXJz
b3JXaXRoVmFsdWU6OmZyb21DdXJzb3IoUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3I+IHBycEN1cnNv
cikKLXsKLSAgICBSZWZQdHI8TGVnYWN5Q3Vyc29yV2l0aFZhbHVlPiBjdXJzb3JXaXRoVmFsdWUo
c3RhdGljX2Nhc3Q8TGVnYWN5Q3Vyc29yV2l0aFZhbHVlKj4ocHJwQ3Vyc29yLmdldCgpKSk7Ci0g
ICAgcmV0dXJuIGN1cnNvcldpdGhWYWx1ZS5yZWxlYXNlKCk7Ci19Ci0KLUxlZ2FjeUN1cnNvcldp
dGhWYWx1ZTo6TGVnYWN5Q3Vyc29yV2l0aFZhbHVlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2Vu
ZD4gYmFja2VuZCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gZGlyZWN0aW9uLCBMZWdhY3lS
ZXF1ZXN0KiByZXF1ZXN0LCBMZWdhY3lBbnkqIHNvdXJjZSwgTGVnYWN5VHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uKQotICAgIDogTGVnYWN5Q3Vyc29yKGJhY2tlbmQsIGRpcmVjdGlvbiwgcmVxdWVz
dCwgc291cmNlLCB0cmFuc2FjdGlvbikKLXsKLX0KLQotTGVnYWN5Q3Vyc29yV2l0aFZhbHVlOjp+
TGVnYWN5Q3Vyc29yV2l0aFZhbHVlKCkKLXsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5Q3Vyc29yV2l0
aFZhbHVlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNThmMmQuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUN1cnNv
cldpdGhWYWx1ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgTGVnYWN5Q3Vyc29yV2l0aFZhbHVlX2gKLSNkZWZpbmUgTGVnYWN5Q3Vyc29yV2l0aFZhbHVl
X2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiTGVnYWN5Q3Vy
c29yLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTGVnYWN5Q3Vyc29yV2l0aFZh
bHVlIDogcHVibGljIExlZ2FjeUN1cnNvciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8TGVnYWN5Q3Vyc29yV2l0aFZhbHVlPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kPiwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIExlZ2FjeVJlcXVlc3QqLCBMZWdhY3lB
bnkqIHNvdXJjZSwgTGVnYWN5VHJhbnNhY3Rpb24qKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxM
ZWdhY3lDdXJzb3JXaXRoVmFsdWU+IGZyb21DdXJzb3IoUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3I+
KTsKLSAgICB2aXJ0dWFsIH5MZWdhY3lDdXJzb3JXaXRoVmFsdWUoKTsKLQotICAgIC8vIFRoZSB2
YWx1ZSBhdHRyaWJ1dGUgZGVmaW5lZCBpbiB0aGUgSURMIGlzIHNpbXBseSBpbXBsZW1lbnRlZCBp
biBMZWdhY3lDdXJzb3IgKGJ1dCBub3QgZXhwb3NlZCB2aWEKLSAgICAvLyBpdHMgSURMKS4gVGhp
cyBpcyB0byBtYWtlIHRoZSBpbXBsZW1lbnRhdGlvbiBtb3JlIHNpbXBsZSB3aGlsZSBtYXRjaGlu
ZyB3aGF0IHRoZSBzcGVjIHNheXMuCi0KLSAgICB2aXJ0dWFsIGJvb2wgaXNLZXlDdXJzb3IoKSBj
b25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQotCi1wcml2YXRlOgotICAgIExl
Z2FjeUN1cnNvcldpdGhWYWx1ZShQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+LCBJbmRleGVk
REI6OkN1cnNvckRpcmVjdGlvbiwgTGVnYWN5UmVxdWVzdCosIExlZ2FjeUFueSogc291cmNlLCBM
ZWdhY3lUcmFuc2FjdGlvbiopOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYKLQotI2VuZGlmIC8vIExlZ2FjeUN1cnNvcldpdGhWYWx1ZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYzZmI5OS4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RGF0YWJhc2UuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNDA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiTGVnYWN5RGF0YWJhc2UuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgotI2luY2x1ZGUgIkV2ZW50UXVl
dWUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSURCQW55LmgiCi0j
aW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxs
YmFja3MuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCi0jaW5jbHVkZSAiSURCRGF0
YWJhc2VFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJJREJFdmVudERpc3BhdGNoZXIuaCIKLSNpbmNs
dWRlICJJREJJbmRleC5oIgotI2luY2x1ZGUgIklEQktleVBhdGguaCIKLSNpbmNsdWRlICJJREJP
YmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiSURC
VmVyc2lvbkNoYW5nZUV2ZW50LmgiCi0jaW5jbHVkZSAiTGVnYWN5T2JqZWN0U3RvcmUuaCIKLSNp
bmNsdWRlICJMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgi
Ci0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgotI2luY2x1ZGUgPGF0b21pYz4K
LSNpbmNsdWRlIDxpbnNwZWN0b3IvU2NyaXB0Q2FsbFN0YWNrLmg+Ci0jaW5jbHVkZSA8bGltaXRz
PgotI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVm
PExlZ2FjeURhdGFiYXNlPiBMZWdhY3lEYXRhYmFzZTo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBkYXRhYmFzZSwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQotewotICAgIFJlZjxM
ZWdhY3lEYXRhYmFzZT4gbGVnYWN5RGF0YWJhc2UoYWRvcHRSZWYoKm5ldyBMZWdhY3lEYXRhYmFz
ZShjb250ZXh0LCBkYXRhYmFzZSwgY2FsbGJhY2tzKSkpOwotICAgIGxlZ2FjeURhdGFiYXNlLT5z
dXNwZW5kSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gbGVnYWN5RGF0YWJhc2U7Ci19Ci0KLUxlZ2Fj
eURhdGFiYXNlOjpMZWdhY3lEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQotICAgIDogSURCRGF0YWJhc2UoY29udGV4dCkK
LSAgICAsIG1fYmFja2VuZChiYWNrZW5kKQotICAgICwgbV9jbG9zZVBlbmRpbmcoZmFsc2UpCi0g
ICAgLCBtX2lzQ2xvc2VkKGZhbHNlKQotICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKLSAg
ICAsIG1fZGF0YWJhc2VDYWxsYmFja3MoY2FsbGJhY2tzKQotewotICAgIC8vIFdlIHBhc3MgYSBy
ZWZlcmVuY2Ugb2YgdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgotICAgIHJl
bGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwotfQotCi1MZWdhY3lEYXRhYmFzZTo6fkxlZ2FjeURh
dGFiYXNlKCkKLXsKLSAgICAvLyBUaGlzIGRvZXMgd2hhdCBMZWdhY3lEYXRhYmFzZTo6Y2xvc2Ug
ZG9lcywgYnV0IHdpdGhvdXQgYW55IHJlZi9kZXJlZiBvZiB0aGUKLSAgICAvLyBkYXRhYmFzZSBz
aW5jZSBpdCBpcyBhbHJlYWR5IGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGRlbGV0ZWQuIFRoZSBs
b2dpYyBoZXJlCi0gICAgLy8gaXMgYWxzbyBzaW1wbGVyIHNpbmNlIHdlIGtub3cgdGhlcmUgYXJl
IG5vIHRyYW5zYWN0aW9ucyAoc2luY2UgdGhleSByZWYgdGhlCi0gICAgLy8gZGF0YWJhc2Ugd2hl
biB0aGV5IGFyZSBhbGl2ZSkuCi0KLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbnMuaXNFbXB0eSgp
KTsKLQotICAgIGlmICghbV9jbG9zZVBlbmRpbmcpIHsKLSAgICAgICAgbV9jbG9zZVBlbmRpbmcg
PSB0cnVlOwotICAgICAgICBtX2JhY2tlbmQtPmNsb3NlKG1fZGF0YWJhc2VDYWxsYmFja3MpOwot
ICAgIH0KLQotICAgIGlmIChhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KSB7Ci0gICAgICAgIC8vIFJlbW92ZSBhbnkgcGVuZGluZyB2ZXJzaW9uY2hhbmdlIGV2ZW50cyBz
Y2hlZHVsZWQgdG8gZmlyZSBvbiB0aGlzCi0gICAgICAgIC8vIGNvbm5lY3Rpb24uIFRoZXkgd291
bGQgaGF2ZSBiZWVuIHNjaGVkdWxlZCBieSB0aGUgYmFja2VuZCB3aGVuIGFub3RoZXIKLSAgICAg
ICAgLy8gY29ubmVjdGlvbiBjYWxsZWQgc2V0VmVyc2lvbiwgYnV0IHRoZSBmcm9udGVuZCBjb25u
ZWN0aW9uIGlzIGJlaW5nCi0gICAgICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBjb3VsZCBmaXJl
LgotICAgICAgICBmb3IgKGF1dG8mIGV2ZW50IDogbV9lbnF1ZXVlZEV2ZW50cykKLSAgICAgICAg
ICAgIGNvbnRleHQtPmV2ZW50UXVldWUoKS5jYW5jZWxFdmVudChldmVudCk7Ci0gICAgfQotfQot
Ci1pbnQ2NF90IExlZ2FjeURhdGFiYXNlOjpuZXh0VHJhbnNhY3Rpb25JZCgpCi17Ci0gICAgLy8g
T25seSBrZWVwIGEgMzItYml0IGNvdW50ZXIgdG8gYWxsb3cgcG9ydHMgdG8gdXNlIHRoZSBvdGhl
ciAzMgotICAgIC8vIGJpdHMgb2YgdGhlIGlkLgotICAgIHN0YXRpYyBzdGQ6OmF0b21pYzx1aW50
MzJfdD4gY3VycmVudFRyYW5zYWN0aW9uSWQ7Ci0KLSAgICByZXR1cm4gKytjdXJyZW50VHJhbnNh
Y3Rpb25JZDsKLX0KLQotdm9pZCBMZWdhY3lEYXRhYmFzZTo6dHJhbnNhY3Rpb25DcmVhdGVkKExl
Z2FjeVRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24p
OwotICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24tPmlkKCkp
KTsKLSAgICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24tPmlkKCksIHRyYW5zYWN0aW9u
KTsKLQotICAgIGlmICh0cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hhbmdlKCkpIHsKLSAgICAgICAg
QVNTRVJUKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik7Ci0gICAgICAgIG1fdmVyc2lvbkNo
YW5nZVRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247Ci0gICAgfQotfQotCi12b2lkIExlZ2FjeURh
dGFiYXNlOjp0cmFuc2FjdGlvbkZpbmlzaGVkKExlZ2FjeVRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
bikKLXsKLSAgICBBU1NFUlQodHJhbnNhY3Rpb24pOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9u
cy5jb250YWlucyh0cmFuc2FjdGlvbi0+aWQoKSkpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9u
cy5nZXQodHJhbnNhY3Rpb24tPmlkKCkpID09IHRyYW5zYWN0aW9uKTsKLSAgICBtX3RyYW5zYWN0
aW9ucy5yZW1vdmUodHJhbnNhY3Rpb24tPmlkKCkpOwotCi0gICAgaWYgKHRyYW5zYWN0aW9uLT5p
c1ZlcnNpb25DaGFuZ2UoKSkgewotICAgICAgICBBU1NFUlQobV92ZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gPT0gdHJhbnNhY3Rpb24pOwotICAgICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
biA9IG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKG1fY2xvc2VQZW5kaW5nICYmIG1fdHJhbnNh
Y3Rpb25zLmlzRW1wdHkoKSkKLSAgICAgICAgY2xvc2VDb25uZWN0aW9uKCk7Ci19Ci0KLXZvaWQg
TGVnYWN5RGF0YWJhc2U6Om9uQWJvcnQoaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+IGVycm9yKQotewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9ucy5j
b250YWlucyh0cmFuc2FjdGlvbklkKSk7Ci0gICAgbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0
aW9uSWQpLT5vbkFib3J0KGVycm9yKTsKLX0KLQotdm9pZCBMZWdhY3lEYXRhYmFzZTo6b25Db21w
bGV0ZShpbnQ2NF90IHRyYW5zYWN0aW9uSWQpCi17Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25z
LmNvbnRhaW5zKHRyYW5zYWN0aW9uSWQpKTsKLSAgICBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNh
Y3Rpb25JZCktPm9uQ29tcGxldGUoKTsKLX0KLQotUmVmUHRyPERPTVN0cmluZ0xpc3Q+IExlZ2Fj
eURhdGFiYXNlOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKLXsKLSAgICBSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAg
IGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy52YWx1ZXMo
KSkKLSAgICAgICAgb2JqZWN0U3RvcmVOYW1lcy0+YXBwZW5kKG9iamVjdFN0b3JlLm5hbWUpOwot
ICAgIG9iamVjdFN0b3JlTmFtZXMtPnNvcnQoKTsKLSAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1l
cy5yZWxlYXNlKCk7Ci19Ci0KLXVpbnQ2NF90IExlZ2FjeURhdGFiYXNlOjp2ZXJzaW9uKCkgY29u
c3QKLXsKLSAgICAvLyBOb0ludFZlcnNpb24gaXMgYSBzcGVjaWFsIHZhbHVlIGZvciBpbnRlcm5h
bCB1c2Ugb25seSBhbmQgc2hvdWxkbid0IGJlIGV4cG9zZWQgdG8gc2NyaXB0LgotICAgIC8vIERl
ZmF1bHRJbnRWZXJzaW9uIHNob3VsZCBiZSBleHBvc2VkIGluc3RlYWQuCi0gICAgcmV0dXJuIG1f
bWV0YWRhdGEudmVyc2lvbiAhPSBJREJEYXRhYmFzZU1ldGFkYXRhOjpOb0ludFZlcnNpb24gPyBt
X21ldGFkYXRhLnZlcnNpb24gOiBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSURCRGF0YWJhc2VNZXRh
ZGF0YTo6RGVmYXVsdEludFZlcnNpb24pOwotfQotCi1SZWZQdHI8SURCT2JqZWN0U3RvcmU+IExl
Z2FjeURhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0g
ICAgSURCS2V5UGF0aCBrZXlQYXRoOwotICAgIGJvb2wgYXV0b0luY3JlbWVudCA9IGZhbHNlOwot
ICAgIGlmICghb3B0aW9ucy5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7Ci0gICAgICAgIFN0cmluZyBr
ZXlQYXRoU3RyaW5nOwotICAgICAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoQXJyYXk7Ci0gICAg
ICAgIGlmIChvcHRpb25zLmdldCgia2V5UGF0aCIsIGtleVBhdGhBcnJheSkpCi0gICAgICAgICAg
ICBrZXlQYXRoID0gSURCS2V5UGF0aChrZXlQYXRoQXJyYXkpOwotICAgICAgICBlbHNlIGlmIChv
cHRpb25zLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygia2V5UGF0aCIsIGtleVBhdGhTdHJp
bmcpKQotICAgICAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgoa2V5UGF0aFN0cmluZyk7Ci0K
LSAgICAgICAgb3B0aW9ucy5nZXQoImF1dG9JbmNyZW1lbnQiLCBhdXRvSW5jcmVtZW50KTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gY3JlYXRlT2JqZWN0U3RvcmUobmFtZSwga2V5UGF0aCwgYXV0b0lu
Y3JlbWVudCwgZWMpOwotfQotCi1SZWZQdHI8SURCT2JqZWN0U3RvcmU+IExlZ2FjeURhdGFiYXNl
OjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgm
IGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBl
YykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeURhdGFiYXNlOjpjcmVhdGVPYmplY3RT
dG9yZSIpOwotICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24pIHsKLSAgICAgICAg
ZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24t
PmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpU
cmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IGlmIChjb250YWluc09iamVjdFN0b3JlKG5hbWUpKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Q29uc3RyYWludEVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBpZiAoIWtleVBhdGguaXNOdWxsKCkgJiYgIWtleVBhdGguaXNWYWxpZCgpKSB7
Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6U3ludGF4RXJyb3I7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmIChhdXRvSW5jcmVtZW50ICYmICgoa2V5
UGF0aC50eXBlKCkgPT0gSW5kZXhlZERCOjpLZXlQYXRoVHlwZTo6U3RyaW5nICYmIGtleVBhdGgu
c3RyaW5nKCkuaXNFbXB0eSgpKSB8fCBrZXlQYXRoLnR5cGUoKSA9PSBJbmRleGVkREI6OktleVBh
dGhUeXBlOjpBcnJheSkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpJbnZhbGlkQWNjZXNzRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1fbWV0YWRhdGEubWF4T2JqZWN0U3RvcmVJZCArIDE7Ci0g
ICAgbV9iYWNrZW5kLT5jcmVhdGVPYmplY3RTdG9yZShtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bi0+aWQoKSwgb2JqZWN0U3RvcmVJZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCk7Ci0K
LSAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1ldGFkYXRhKG5hbWUsIG9iamVjdFN0b3JlSWQs
IGtleVBhdGgsIGF1dG9JbmNyZW1lbnQsIElEQkRhdGFiYXNlQmFja2VuZDo6TWluaW11bUluZGV4
SWQpOwotICAgIFJlZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUgPSBMZWdhY3lP
YmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi5n
ZXQoKSk7Ci0gICAgbV9tZXRhZGF0YS5vYmplY3RTdG9yZXMuc2V0KG1ldGFkYXRhLmlkLCBtZXRh
ZGF0YSk7Ci0gICAgKyttX21ldGFkYXRhLm1heE9iamVjdFN0b3JlSWQ7Ci0KLSAgICBtX3ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3Jl
KTsKLSAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgpOwotfQotCi12b2lkIExlZ2FjeURh
dGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lEYXRhYmFz
ZTo6ZGVsZXRlT2JqZWN0U3RvcmUiKTsKLSAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0
aW9uKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0
YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtX3ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGZpbmRPYmplY3RTdG9yZUlkKG5h
bWUpOwotICAgIGlmIChvYmplY3RTdG9yZUlkID09IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6Oklu
dmFsaWRJZCkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZv
dW5kRXJyb3I7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2JhY2tlbmQtPmRlbGV0
ZU9iamVjdFN0b3JlKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pZCgpLCBvYmplY3RTdG9y
ZUlkKTsKLSAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVEZWxldGVk
KG5hbWUpOwotICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlk
KTsKLX0KLQotUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBMZWdhY3lEYXRhYmFzZTo6dHJhbnNhY3Rp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHNjb3BlLCBjb25zdCBTdHJpbmcmIG1vZGVTdHJpbmcsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lEYXRhYmFzZTo6dHJhbnNhY3Rp
b24iKTsKLSAgICBpZiAoIXNjb3BlLnNpemUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkludmFsaWRBY2Nlc3NFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSA9IElEQlRyYW5zYWN0
aW9uOjpzdHJpbmdUb01vZGUobW9kZVN0cmluZywgZWMuY29kZSk7Ci0gICAgaWYgKGVjLmNvZGUp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
IHx8IG1fY2xvc2VQZW5kaW5nKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IFZlY3RvcjxpbnQ2NF90PiBvYmplY3RTdG9yZUlkczsKLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBz
Y29wZSkgewotICAgICAgICBpbnQ2NF90IG9iamVjdFN0b3JlSWQgPSBmaW5kT2JqZWN0U3RvcmVJ
ZChuYW1lKTsKLSAgICAgICAgaWYgKG9iamVjdFN0b3JlSWQgPT0gSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YTo6SW52YWxpZElkKSB7Ci0gICAgICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNl
cHRpb246Ok5vdEZvdW5kRXJyb3I7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQot
ICAgICAgICBvYmplY3RTdG9yZUlkcy5hcHBlbmQob2JqZWN0U3RvcmVJZCk7Ci0gICAgfQotCi0g
ICAgaW50NjRfdCB0cmFuc2FjdGlvbklkID0gbmV4dFRyYW5zYWN0aW9uSWQoKTsKLSAgICBtX2Jh
Y2tlbmQtPmNyZWF0ZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIG1fZGF0YWJhc2VDYWxsYmFj
a3MsIG9iamVjdFN0b3JlSWRzLCBtb2RlKTsKLQotICAgIFJlZlB0cjxMZWdhY3lUcmFuc2FjdGlv
bj4gdHJhbnNhY3Rpb24gPSBMZWdhY3lUcmFuc2FjdGlvbjo6Y3JlYXRlKGNvbnRleHQsIHRyYW5z
YWN0aW9uSWQsIHNjb3BlLCBtb2RlLCB0aGlzKTsKLSAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVs
ZWFzZSgpOwotfQotCi1SZWZQdHI8SURCVHJhbnNhY3Rpb24+IExlZ2FjeURhdGFiYXNlOjp0cmFu
c2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHN0
b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2RlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVj
KQotewotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBzdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlz
dDo6Y3JlYXRlKCk7Ci0gICAgc3RvcmVOYW1lcy0+YXBwZW5kKHN0b3JlTmFtZSk7Ci0gICAgcmV0
dXJuIHRyYW5zYWN0aW9uKGNvbnRleHQsIHN0b3JlTmFtZXMsIG1vZGUsIGVjKTsKLX0KLQotdm9p
ZCBMZWdhY3lEYXRhYmFzZTo6Zm9yY2VDbG9zZSgpCi17Ci0gICAgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlIGVjOwotICAgIGZvciAoYXV0byYgdHJhbnNhY3Rpb24gOiBtX3RyYW5zYWN0aW9ucy52
YWx1ZXMoKSkKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KGVjKTsKLSAgICB0aGlzLT5jbG9z
ZSgpOwotfQotCi12b2lkIExlZ2FjeURhdGFiYXNlOjpjbG9zZSgpCi17Ci0gICAgTE9HKFN0b3Jh
Z2VBUEksICJMZWdhY3lEYXRhYmFzZTo6Y2xvc2UiKTsKLSAgICBpZiAobV9jbG9zZVBlbmRpbmcp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY2xvc2VQZW5kaW5nID0gdHJ1ZTsKLQotICAgIGlm
IChtX3RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCi0gICAgICAgIGNsb3NlQ29ubmVjdGlvbigpOwot
fQotCi12b2lkIExlZ2FjeURhdGFiYXNlOjpjbG9zZUNvbm5lY3Rpb24oKQotewotICAgIEFTU0VS
VChtX2Nsb3NlUGVuZGluZyk7Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7
Ci0KLSAgICAvLyBDbG9zaW5nIG1heSByZXN1bHQgaW4gZGVhbGxvY2F0aW5nIHRoZSBsYXN0IHRy
YW5zYWN0aW9uLCB3aGljaCBjb3VsZCByZXN1bHQgaW4gZGVsZXRpbmcKLSAgICAvLyB0aGlzIExl
Z2FjeURhdGFiYXNlLiBXZSBuZWVkIHRoZSBkZWFsbG9jYXRpb24gdG8gaGFwcGVuIGFmdGVyIHdl
IGFyZSB0aHJvdWdoLgotICAgIFJlZjxMZWdhY3lEYXRhYmFzZT4gcHJvdGVjdCgqdGhpcyk7Ci0K
LSAgICBtX2JhY2tlbmQtPmNsb3NlKG1fZGF0YWJhc2VDYWxsYmFja3MpOwotCi0gICAgaWYgKG1f
Y29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgRXZlbnRRdWV1ZSYgZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKS0+ZXZlbnRRdWV1ZSgpOwotICAgIC8vIFJlbW92ZSBhbnkgcGVuZGluZyB2ZXJzaW9uY2hh
bmdlIGV2ZW50cyBzY2hlZHVsZWQgdG8gZmlyZSBvbiB0aGlzCi0gICAgLy8gY29ubmVjdGlvbi4g
VGhleSB3b3VsZCBoYXZlIGJlZW4gc2NoZWR1bGVkIGJ5IHRoZSBiYWNrZW5kIHdoZW4gYW5vdGhl
cgotICAgIC8vIGNvbm5lY3Rpb24gY2FsbGVkIHNldFZlcnNpb24sIGJ1dCB0aGUgZnJvbnRlbmQg
Y29ubmVjdGlvbiBpcyBiZWluZwotICAgIC8vIGNsb3NlZCBiZWZvcmUgdGhleSBjb3VsZCBmaXJl
LgotICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2VucXVldWVkRXZlbnRzKSB7Ci0gICAgICAgIGJv
b2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2VsRXZlbnQoZXZlbnQpOwotICAgICAgICBBU1NF
UlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwotICAgIH0KLQotICAgIG1faXNDbG9zZWQgPSB0
cnVlOwotfQotCi12b2lkIExlZ2FjeURhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2UodWludDY0X3Qg
b2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbikKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwg
IkxlZ2FjeURhdGFiYXNlOjpvblZlcnNpb25DaGFuZ2UiKTsKLSAgICBpZiAobV9jb250ZXh0U3Rv
cHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV9jbG9zZVBlbmRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChuZXdW
ZXJzaW9uICE9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbik7Ci0gICAgZW5xdWV1
ZUV2ZW50KExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZlcnNpb24sIG5ld1Zl
cnNpb24sIGV2ZW50TmFtZXMoKS52ZXJzaW9uY2hhbmdlRXZlbnQpKTsKLX0KLQotdm9pZCBMZWdh
Y3lEYXRhYmFzZTo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKLXsKLSAgICBBU1NF
UlQoIW1fY29udGV4dFN0b3BwZWQpOwotICAgIEFTU0VSVCghbV9pc0Nsb3NlZCk7Ci0gICAgQVNT
RVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgZXZlbnQtPnNldFRhcmdldCh0aGlz
KTsKLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50UXVldWUoKS5lbnF1ZXVlRXZl
bnQoZXZlbnQuY29weVJlZigpKTsKLSAgICBtX2VucXVldWVkRXZlbnRzLmFwcGVuZChXVEZNb3Zl
KGV2ZW50KSk7Ci19Ci0KLWJvb2wgTGVnYWN5RGF0YWJhc2U6OmRpc3BhdGNoRXZlbnQoRXZlbnQm
IGV2ZW50KQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5RGF0YWJhc2U6OmRpc3BhdGNo
RXZlbnQiKTsKLSAgICBBU1NFUlQoZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS52ZXJzaW9u
Y2hhbmdlRXZlbnQpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9lbnF1ZXVlZEV2ZW50c1tpXS5wdHIoKSA9
PSAmZXZlbnQpCi0gICAgICAgICAgICBtX2VucXVldWVkRXZlbnRzLnJlbW92ZShpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50KTsKLX0KLQotaW50
NjRfdCBMZWdhY3lEYXRhYmFzZTo6ZmluZE9iamVjdFN0b3JlSWQoY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAotewotICAgIGZvciAoYXV0byYgb2JqZWN0U3RvcmUgOiBtX21ldGFkYXRhLm9iamVj
dFN0b3JlcykgewotICAgICAgICBpZiAob2JqZWN0U3RvcmUudmFsdWUubmFtZSA9PSBuYW1lKSB7
Ci0gICAgICAgICAgICBBU1NFUlQob2JqZWN0U3RvcmUua2V5ICE9IElEQk9iamVjdFN0b3JlTWV0
YWRhdGE6OkludmFsaWRJZCk7Ci0gICAgICAgICAgICByZXR1cm4gb2JqZWN0U3RvcmUua2V5Owot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZh
bGlkSWQ7Ci19Ci0KLWJvb2wgTGVnYWN5RGF0YWJhc2U6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0Ci17Ci0gICAgLy8gVGhlIHNjcmlwdCB3cmFwcGVyIG11c3Qgbm90IGJlIGNvbGxlY3RlZCBi
ZWZvcmUgdGhlIG9iamVjdCBpcyBjbG9zZWQgb3IKLSAgICAvLyB3ZSBjYW4ndCBmaXJlIGEgInZl
cnNpb25jaGFuZ2UiIGV2ZW50IHRvIGxldCBzY3JpcHQgbWFudWFsbHkgY2xvc2UgdGhlIGNvbm5l
Y3Rpb24uCi0gICAgcmV0dXJuICFtX2Nsb3NlUGVuZGluZyAmJiBoYXNFdmVudExpc3RlbmVycygp
ICYmICFtX2NvbnRleHRTdG9wcGVkOwotfQotCi12b2lkIExlZ2FjeURhdGFiYXNlOjpzdG9wKCkK
LXsKLSAgICAvLyBTdG9wIGZpcmVzIGF0IGEgZGV0ZXJtaW5pc3RpYyB0aW1lLCBzbyB3ZSBuZWVk
IHRvIGNhbGwgY2xvc2UgaW4gaXQuCi0gICAgY2xvc2UoKTsKLQotICAgIG1fY29udGV4dFN0b3Bw
ZWQgPSB0cnVlOwotfQotCi1jb25zdCBjaGFyKiBMZWdhY3lEYXRhYmFzZTo6YWN0aXZlRE9NT2Jq
ZWN0TmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICJMZWdhY3lEYXRhYmFzZSI7Ci19Ci0KLWJv
b2wgTGVnYWN5RGF0YWJhc2U6OmNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25z
dAotewotICAgIHJldHVybiBtX2lzQ2xvc2VkOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lEYXRhYmFzZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMjhhZjQuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeURhdGFiYXNlLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTGVnYWN5RGF0YWJhc2Vf
aAotI2RlZmluZSBMZWdhY3lEYXRhYmFzZV9oCi0KLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCi0jaW5jbHVkZSAiRGljdGlvbmFyeS5oIgot
I2luY2x1ZGUgIkV2ZW50LmgiCi0jaW5jbHVkZSAiRXZlbnRUYXJnZXQuaCIKLSNpbmNsdWRlICJJ
REJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVk
ZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgotI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCi0j
aW5jbHVkZSAiSW5kZXhlZERCLmgiCi0jaW5jbHVkZSAiTGVnYWN5VHJhbnNhY3Rpb24uaCIKLSNp
bmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgTGVnYWN5VHJhbnNhY3Rpb247Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotCi10
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBMZWdhY3lEYXRhYmFzZSBmaW5hbCA6
IHB1YmxpYyBJREJEYXRhYmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxMZWdhY3lEYXRh
YmFzZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQmFja2VuZD4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKLSAgICB+TGVn
YWN5RGF0YWJhc2UoKTsKLQotICAgIHZvaWQgc2V0TWV0YWRhdGEoY29uc3QgSURCRGF0YWJhc2VN
ZXRhZGF0YSYgbWV0YWRhdGEpIHsgbV9tZXRhZGF0YSA9IG1ldGFkYXRhOyB9Ci0gICAgdm9pZCB0
cmFuc2FjdGlvbkNyZWF0ZWQoTGVnYWN5VHJhbnNhY3Rpb24qKTsKLSAgICB2b2lkIHRyYW5zYWN0
aW9uRmluaXNoZWQoTGVnYWN5VHJhbnNhY3Rpb24qKTsKLQotICAgIC8vIEltcGxlbWVudCB0aGUg
SURMCi0gICAgdmlydHVhbCBjb25zdCBTdHJpbmcgbmFtZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFs
IHsgcmV0dXJuIG1fbWV0YWRhdGEubmFtZTsgfQotICAgIHZpcnR1YWwgdWludDY0X3QgdmVyc2lv
bigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgUmVmUHRyPERPTVN0cmluZ0xp
c3Q+IG9iamVjdFN0b3JlTmFtZXMoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKLQotICAgIHZpcnR1
YWwgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IERpY3Rpb25hcnkmLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBvdmVy
cmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gY3JlYXRlT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRv
SW5jcmVtZW50LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBvdmVycmlkZSBmaW5hbDsKLSAg
ICB2aXJ0dWFsIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiBtb2RlLCBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgbW9kZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJikgb3ZlcnJpZGUgZmluYWw7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgb3ZlcnJpZGUg
ZmluYWw7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgb3ZlcnJpZGUgZmluYWw7Ci0KLSAgICAv
LyBJREJEYXRhYmFzZUNhbGxiYWNrcwotICAgIHZpcnR1YWwgdm9pZCBvblZlcnNpb25DaGFuZ2Uo
dWludDY0X3Qgb2xkVmVyc2lvbiwgdWludDY0X3QgbmV3VmVyc2lvbik7Ci0gICAgdmlydHVhbCB2
b2lkIG9uQWJvcnQoaW50NjRfdCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik7Ci0gICAg
dmlydHVhbCB2b2lkIG9uQ29tcGxldGUoaW50NjRfdCk7Ci0KLSAgICAvLyBFdmVudFRhcmdldAot
ICAgIHZpcnR1YWwgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBj
b25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBJREJEYXRhYmFzZUV2ZW50VGFyZ2V0SW50ZXJm
YWNlVHlwZTsgfQotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIEFjdGl2ZURPTU9i
amVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9Ci0KLSAgICBib29sIGlzQ2xvc2VQZW5k
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9jbG9zZVBlbmRpbmc7IH0KLSAgICB2b2lkIGZvcmNlQ2xv
c2UoKTsKLSAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9tZXRhZGF0YTsgfQotICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJik7
Ci0KLSAgICB1c2luZyBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudDsKLSAgICB2aXJ0dWFsIGJv
b2wgZGlzcGF0Y2hFdmVudChFdmVudCYpIG92ZXJyaWRlOwotCi0gICAgaW50NjRfdCBmaW5kT2Jq
ZWN0U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwotICAgIGJvb2wgY29udGFpbnNP
YmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gZmluZE9iamVjdFN0b3JlSWQobmFtZSkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52
YWxpZElkOwotICAgIH0KLQotICAgIElEQkRhdGFiYXNlQmFja2VuZCogYmFja2VuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQotCi0gICAgc3RhdGljIGludDY0X3QgbmV4dFRy
YW5zYWN0aW9uSWQoKTsKLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEkuCi0gICAgYm9vbCBo
YXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBMZWdh
Y3lEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUJhY2tlbmQ+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7Ci0KLSAgICBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IHNjb3BlLCBjb25zdCBTdHJpbmcm
IG1vZGUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIHsgcmV0dXJuIHRyYW5zYWN0aW9u
KGNvbnRleHQsICpzY29wZSwgbW9kZSwgZWMpOyB9Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3Qg
QVBJLgotICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwotICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURP
TU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGNhblN1c3BlbmRGb3JEb2N1
bWVudFN1c3BlbnNpb24oKSBjb25zdCBvdmVycmlkZTsKLQotICAgIC8vIEV2ZW50VGFyZ2V0Ci0g
ICAgdmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwgeyByZWYoKTsg
fQotICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgZmluYWwgeyBk
ZXJlZigpOyB9Ci0KLSAgICB2b2lkIGNsb3NlQ29ubmVjdGlvbigpOwotCi0gICAgSURCRGF0YWJh
c2VNZXRhZGF0YSBtX21ldGFkYXRhOwotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IG1f
YmFja2VuZDsKLSAgICBSZWZQdHI8TGVnYWN5VHJhbnNhY3Rpb24+IG1fdmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uOwotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2NF90LCBMZWdhY3lUcmFuc2FjdGlv
bio+IFRyYW5zYWN0aW9uTWFwOwotICAgIFRyYW5zYWN0aW9uTWFwIG1fdHJhbnNhY3Rpb25zOwot
Ci0gICAgYm9vbCBtX2Nsb3NlUGVuZGluZzsKLSAgICBib29sIG1faXNDbG9zZWQ7Ci0gICAgYm9v
bCBtX2NvbnRleHRTdG9wcGVkOwotCi0gICAgLy8gS2VlcCB0cmFjayBvZiB0aGUgdmVyc2lvbmNo
YW5nZSBldmVudHMgd2FpdGluZyB0byBiZSBmaXJlZCBvbiB0aGlzCi0gICAgLy8gZGF0YWJhc2Ug
c28gdGhhdCB3ZSBjYW4gY2FuY2VsIHRoZW0gaWYgdGhlIGRhdGFiYXNlIGNsb3Nlcy4KLSAgICBW
ZWN0b3I8UmVmPEV2ZW50Pj4gbV9lbnF1ZXVlZEV2ZW50czsKLQotICAgIFJlZlB0cjxJREJEYXRh
YmFzZUNhbGxiYWNrcz4gbV9kYXRhYmFzZUNhbGxiYWNrczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBMZWdhY3lEYXRhYmFzZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RmFjdG9y
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RmFj
dG9yeS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwODUyY2EuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUZhY3Rv
cnkuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJMZWdhY3lGYWN0b3J5LmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSURCQmluZGluZ1V0aWxpdGllcy5oIgotI2luY2x1ZGUg
IklEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0
aW9uLmgiCi0jaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKLSNpbmNsdWRl
ICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIkxlZ2FjeUFu
eS5oIgotI2luY2x1ZGUgIkxlZ2FjeURhdGFiYXNlLmgiCi0jaW5jbHVkZSAiTGVnYWN5T3BlbkRC
UmVxdWVzdC5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5j
bHVkZSAiUGFnZUdyb3VwLmgiCi0jaW5jbHVkZSAiU2NoZW1lUmVnaXN0cnkuaCIKLSNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1ZGUgIldvcmtlckdsb2JhbFNjb3BlLmgiCi0jaW5j
bHVkZSAiV29ya2VyTG9hZGVyUHJveHkuaCIKLSNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1MZWdhY3lGYWN0b3J5OjpMZWdhY3lGYWN0b3J5KElEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5KQotICAgIDogbV9iYWNrZW5kKGZhY3Rvcnkp
Ci17Ci0gICAgLy8gV2UgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBiZWZvcmUgaXQg
Y2FuIGJlIGFkb3B0ZWQuCi0gICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci19Ci0KLUxl
Z2FjeUZhY3Rvcnk6On5MZWdhY3lGYWN0b3J5KCkKLXsKLX0KLQotc3RhdGljIGJvb2wgaXNDb250
ZXh0VmFsaWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBBU1NFUlQo
aXM8RG9jdW1lbnQ+KCpjb250ZXh0KSB8fCBjb250ZXh0LT5pc1dvcmtlckdsb2JhbFNjb3BlKCkp
OwotICAgIGlmIChpczxEb2N1bWVudD4oKmNvbnRleHQpKSB7Ci0gICAgICAgIERvY3VtZW50JiBk
b2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7Ci0gICAgICAgIHJldHVybiBk
b2N1bWVudC5mcmFtZSgpICYmIGRvY3VtZW50LnBhZ2UoKSAmJiAoIWRvY3VtZW50LnBhZ2UoKS0+
dXNlc0VwaGVtZXJhbFNlc3Npb24oKSB8fCBTY2hlbWVSZWdpc3RyeTo6YWxsb3dzRGF0YWJhc2VB
Y2Nlc3NJblByaXZhdGVCcm93c2luZyhkb2N1bWVudC5zZWN1cml0eU9yaWdpbigpLT5wcm90b2Nv
bCgpKSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1SZWZQdHI8SURCUmVxdWVzdD4g
TGVnYWN5RmFjdG9yeTo6Z2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2Fj
eUZhY3Rvcnk6OmdldERhdGFiYXNlTmFtZXMiKTsKLSAgICBpZiAoIWlzQ29udGV4dFZhbGlkKGNv
bnRleHQpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWNvbnRleHQtPnNlY3VyaXR5T3Jp
Z2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRleHQtPnRvcE9yaWdpbigpKSkgewotICAgICAg
ICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVm
UHRyPExlZ2FjeVJlcXVlc3Q+IHJlcXVlc3QgPSBMZWdhY3lSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyksIDApOwotICAgIG1fYmFja2VuZC0+Z2V0RGF0YWJh
c2VOYW1lcyhyZXF1ZXN0LCAqKGNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpLCAqKGNvbnRleHQt
PnRvcE9yaWdpbigpKSwgY29udGV4dCk7Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLVJlZlB0
cjxJREJPcGVuREJSZXF1ZXN0PiBMZWdhY3lGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lGYWN0b3J5OjpvcGVuIik7Ci0gICAgcmV0dXJu
IG9wZW5JbnRlcm5hbChjb250ZXh0LCBuYW1lLCAwLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVz
czo6TnVsbCwgZWMpOwotfQotCi1SZWZQdHI8SURCT3BlbkRCUmVxdWVzdD4gTGVnYWN5RmFjdG9y
eTo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5h
bWUsIHVuc2lnbmVkIGxvbmcgbG9uZyB2ZXJzaW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUZhY3Rvcnk6Om9wZW4iKTsKLSAgICBpZiAoIXZlcnNp
b24pIHsKLSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICByZXR1cm4gb3BlbkludGVybmFsKGNvbnRleHQsIG5hbWUsIHZlcnNpb24sIEluZGV4ZWRE
Qjo6VmVyc2lvbk51bGxuZXNzOjpOb25OdWxsLCBlYyk7Ci19Ci0KLVBhc3NSZWZQdHI8SURCT3Bl
bkRCUmVxdWVzdD4gTGVnYWN5RmFjdG9yeTo6b3BlbkludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgdWludDY0X3QgdmVyc2lvbiwgSW5k
ZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MgdmVyc2lvbk51bGxuZXNzLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBBU1NFUlQodmVyc2lvbiA+PSAxIHx8IHZlcnNpb25OdWxsbmVzcyA9PSBJbmRl
eGVkREI6OlZlcnNpb25OdWxsbmVzczo6TnVsbCk7Ci0gICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsK
LSAgICAgICAgZWMgPSBUeXBlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBp
ZiAoIWlzQ29udGV4dFZhbGlkKGNvbnRleHQpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
IWNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKGNvbnRleHQtPnRv
cE9yaWdpbigpKSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNh
bGxiYWNrcyA9IElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbDo6Y3JlYXRlKCk7Ci0gICAgaW50NjRf
dCB0cmFuc2FjdGlvbklkID0gTGVnYWN5RGF0YWJhc2U6Om5leHRUcmFuc2FjdGlvbklkKCk7Ci0g
ICAgUmVmUHRyPExlZ2FjeU9wZW5EQlJlcXVlc3Q+IHJlcXVlc3QgPSBMZWdhY3lPcGVuREJSZXF1
ZXN0OjpjcmVhdGUoY29udGV4dCwgZGF0YWJhc2VDYWxsYmFja3MsIHRyYW5zYWN0aW9uSWQsIHZl
cnNpb24sIHZlcnNpb25OdWxsbmVzcyk7Ci0gICAgbV9iYWNrZW5kLT5vcGVuKG5hbWUsIHZlcnNp
b24sIHRyYW5zYWN0aW9uSWQsIHJlcXVlc3QsIGRhdGFiYXNlQ2FsbGJhY2tzLCAqKGNvbnRleHQt
PnNlY3VyaXR5T3JpZ2luKCkpLCAqKGNvbnRleHQtPnRvcE9yaWdpbigpKSk7Ci0gICAgcmV0dXJu
IHJlcXVlc3Q7Ci19Ci0KLVJlZlB0cjxJREJPcGVuREJSZXF1ZXN0PiBMZWdhY3lGYWN0b3J5Ojpk
ZWxldGVEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiTGVn
YWN5RmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UiKTsKLSAgICBpZiAobmFtZS5pc051bGwoKSkgewot
ICAgICAgICBlYyA9IFR5cGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlm
ICghaXNDb250ZXh0VmFsaWQoY29udGV4dCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICgh
Y29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoY29udGV4dC0+dG9w
T3JpZ2luKCkpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8TGVnYWN5T3BlbkRCUmVxdWVzdD4gcmVxdWVzdCA9IExl
Z2FjeU9wZW5EQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCAwLCAwLCAwLCBJbmRleGVkREI6OlZl
cnNpb25OdWxsbmVzczo6TnVsbCk7Ci0gICAgbV9iYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1l
LCAqY29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSwgKmNvbnRleHQtPnRvcE9yaWdpbigpLCByZXF1
ZXN0LCBjb250ZXh0KTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotc2hvcnQgTGVnYWN5RmFj
dG9yeTo6Y21wKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0
ZWQ6OlNjcmlwdFZhbHVlJiBmaXJzdFZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYgc2Vjb25kVmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgRE9N
UmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZShjb250ZXh0KTsKLSAgICBSZWZQdHI8SURCS2V5PiBm
aXJzdCA9IHNjcmlwdFZhbHVlVG9JREJLZXkoJnJlcXVlc3RTdGF0ZSwgZmlyc3RWYWx1ZSk7Ci0g
ICAgUmVmUHRyPElEQktleT4gc2Vjb25kID0gc2NyaXB0VmFsdWVUb0lEQktleSgmcmVxdWVzdFN0
YXRlLCBzZWNvbmRWYWx1ZSk7Ci0KLSAgICBBU1NFUlQoZmlyc3QpOwotICAgIEFTU0VSVChzZWNv
bmQpOwotCi0gICAgaWYgKCFmaXJzdC0+aXNWYWxpZCgpIHx8ICFzZWNvbmQtPmlzVmFsaWQoKSkg
ewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHNob3J0Pihm
aXJzdC0+Y29tcGFyZShzZWNvbmQuZ2V0KCkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RmFjdG9yeS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeUZhY3RvcnkuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNjMWU3NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5RmFjdG9yeS5oCisrKyAvZGV2
L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLSNpZm5kZWYgTGVnYWN5RmFjdG9yeV9oCi0jZGVmaW5lIExlZ2FjeUZhY3Rv
cnlfaAotCi0jaW5jbHVkZSAiSURCRmFjdG9yeS5oIgotI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVl
c3QuaCIKLSNpbmNsdWRlICJTY3JpcHRXcmFwcGFibGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCS2V5OwotY2xh
c3MgSURCS2V5UmFuZ2U7Ci1jbGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKLWNsYXNz
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Ci0KLXR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7Ci0K
LWNsYXNzIExlZ2FjeUZhY3RvcnkgOiBwdWJsaWMgU2NyaXB0V3JhcHBhYmxlLCBwdWJsaWMgSURC
RmFjdG9yeSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGVnYWN5RmFjdG9yeT4g
Y3JlYXRlKElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKiBmYWN0b3J5KQotICAgIHsKLSAgICAg
ICAgLy8gRklYTUU6IFdoaWxlIHRoZSBmZWF0dXJlIGlzIHVuZGVyIGRldmVsb3BtZW50IHdlJ2xs
IGhhbmRsZSBhIG51bGwgZmFjdG9yeSBiYWNrZW5kIGhlcmUsCi0gICAgICAgIC8vIHJldHVybmlu
ZyBudWxsLCBzbyBqYXZhc2NyaXB0IGNhbid0IHRyeSB0byB1c2UgdGhlIGZlYXR1cmUuCi0gICAg
ICAgIC8vIE9uY2UgdGhlIGZlYXR1cmUgaXMgZnVsbHkgZnVuY3Rpb25hbCB3ZSBzaG91bGQgcmVt
b3ZlIHRoZSBudWxsIGZhY3RvcnkgYmFja2VuZC4KLSAgICAgICAgcmV0dXJuIGZhY3RvcnkgPyBh
ZG9wdFJlZihuZXcgTGVnYWN5RmFjdG9yeShmYWN0b3J5KSkgOiBudWxscHRyOwotICAgIH0KLSAg
ICB+TGVnYWN5RmFjdG9yeSgpOwotCi0gICAgLy8gRklYTUU6IGdldERhdGFiYXNlTmFtZXMgaXMg
bm8gbG9uZ2VyIGEgd2ViLWZhY2luZyBBUEksIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIExl
Z2FjeUZhY3RvcnkuCi0gICAgLy8gVGhlIFdlYiBJbnNwZWN0b3IgY3VycmVudGx5IHVzZXMgdGhp
cyB0byBlbnVtZXJhdGUgdGhlIGxpc3Qgb2YgZGF0YWJhc2VzLCBidXQgaXMgbW9yZSBjb21wbGlj
YXRlZCBhcyBhIHJlc3VsdC4KLSAgICAvLyBXZSBzaG91bGQgcHJvdmlkZSBhIHNpbXBsZXIgQVBJ
IHRvIHRoZSBXZWIgSW5zcGVjdG9yIHRoZW4gcmVtb3ZlIGdldERhdGFiYXNlTmFtZXMuCi0gICAg
dmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgRXhjZXB0aW9uQ29kZSYpIG92ZXJyaWRlOwotCi0gICAgdmlydHVhbCBSZWZQ
dHI8SURCT3BlbkRCUmVxdWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBSZWZQ
dHI8SURCT3BlbkRCUmVxdWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCB1bnNpZ25lZCBsb25nIGxvbmcgdmVyc2lvbiwgRXhjZXB0aW9uQ29kZSYp
IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IGRlbGV0ZURh
dGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmKSBvdmVycmlkZTsKLQotICAgIHNob3J0IGNtcChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGZpcnN0LCBjb25zdCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYgc2Vjb25kLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBvdmVy
cmlkZTsKLQotcHJpdmF0ZToKLSAgICBMZWdhY3lGYWN0b3J5KElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlKik7Ci0KLSAgICBQYXNzUmVmUHRyPElEQk9wZW5EQlJlcXVlc3Q+IG9wZW5JbnRlcm5h
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCB1aW50NjRfdCB2
ZXJzaW9uLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzcywgRXhjZXB0aW9uQ29kZSYpOwotCi0g
ICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgotCi0jZW5kaWYgLy8gTGVnYWN5RmFjdG9y
eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5SW5kZXguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0xlZ2FjeUluZGV4LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdhMDkzZi4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVn
YWN5SW5kZXguY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGVnYWN5SW5kZXguaCIKLQotI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKLSNp
bmNsdWRlICJJREJLZXkuaCIKLSNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklE
Qk9iamVjdFN0b3JlLmgiCi0jaW5jbHVkZSAiSURCUmVxdWVzdC5oIgotI2luY2x1ZGUgIklEQlRy
YW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1MZWdhY3lJbmRleDo6TGVn
YWN5SW5kZXgoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEsIExlZ2FjeU9iamVjdFN0
b3JlKiBvYmplY3RTdG9yZSwgTGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIDog
bV9tZXRhZGF0YShtZXRhZGF0YSkKLSAgICAsIG1fb2JqZWN0U3RvcmUob2JqZWN0U3RvcmUpCi0g
ICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQotICAgICwgbV9kZWxldGVkKGZhbHNlKQot
ewotICAgIEFTU0VSVChtX29iamVjdFN0b3JlKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7
Ci0gICAgQVNTRVJUKG1fbWV0YWRhdGEuaWQgIT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElk
KTsKLX0KLQotTGVnYWN5SW5kZXg6On5MZWdhY3lJbmRleCgpCi17Ci19Ci0KLXZvaWQgTGVnYWN5
SW5kZXg6OnJlZigpCi17Ci0gICAgKyttX3JlZkNvdW50OwotfQotCi12b2lkIExlZ2FjeUluZGV4
OjpkZXJlZigpCi17Ci0gICAgaWYgKC0tbV9yZWZDb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZGVsZXRlIHRoaXM7Ci19Ci0KLVJlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJbmRleDo6b3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJREJLZXlSYW5nZSoga2V5
UmFuZ2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5SW5kZXg6Om9wZW5DdXJz
b3IiKTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLSAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rp
b24gPSBJREJDdXJzb3I6OnN0cmluZ1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmluZywgZWMuY29k
ZSk7Ci0gICAgaWYgKGVjLmNvZGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPExl
Z2FjeVJlcXVlc3Q+IHJlcXVlc3QgPSBMZWdhY3lSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgTGVn
YWN5QW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIHJlcXVlc3Qt
PnNldEN1cnNvckRldGFpbHMoSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlBbmRWYWx1ZSwgZGly
ZWN0aW9uKTsKLSAgICBiYWNrZW5kREIoKS0+b3BlbkN1cnNvcihtX3RyYW5zYWN0aW9uLT5pZCgp
LCBtX29iamVjdFN0b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgZGlyZWN0aW9u
LCBmYWxzZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpOb3JtYWxUYXNrLCByZXF1ZXN0KTsKLSAgICBy
ZXR1cm4gcmVxdWVzdDsKLX0KLQotUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeUluZGV4OjpvcGVu
Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlJiBrZXksIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5SW5kZXg6Om9w
ZW5DdXJzb3IiKTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFu
Z2U6Om9ubHkoY29udGV4dCwga2V5LCBlYy5jb2RlKTsKLSAgICBpZiAoZWMuY29kZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2UuZ2V0
KCksIGRpcmVjdGlvbiwgZWMpOwotfQotCi1SZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5SW5kZXg6
OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIElEQktleVJhbmdlKiBrZXlS
YW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQ
SSwgIkxlZ2FjeUluZGV4Ojpjb3VudCIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAg
ZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkg
ewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5h
Y3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIFJlZlB0cjxMZWdhY3lS
ZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIExlZ2FjeUFu
eTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBiYWNrZW5kREIoKS0+
Y291bnQobV90cmFuc2FjdGlvbi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0
YS5pZCwga2V5UmFuZ2UsIHJlcXVlc3QpOwotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1SZWZQ
dHI8SURCUmVxdWVzdD4gTGVnYWN5SW5kZXg6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lJbmRleDo6
Y291bnQiKTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6
Om9ubHkoY29udGV4dCwga2V5LCBlYy5jb2RlKTsKLSAgICBpZiAoZWMuY29kZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNvdW50KGNvbnRleHQsIGtleVJhbmdlLmdldCgpLCBlYyk7
Ci19Ci0KLVJlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJbmRleDo6b3BlbktleUN1cnNvcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJREJLZXlSYW5nZSoga2V5UmFuZ2UsIGNvbnN0
IFN0cmluZyYgZGlyZWN0aW9uU3RyaW5nLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQot
ewotICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5SW5kZXg6Om9wZW5LZXlDdXJzb3IiKTsKLSAg
ICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAo
IW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBkaXJlY3Rpb24gPSBJREJD
dXJzb3I6OnN0cmluZ1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmluZywgZWMuY29kZSk7Ci0gICAg
aWYgKGVjLmNvZGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPExlZ2FjeVJlcXVl
c3Q+IHJlcXVlc3QgPSBMZWdhY3lSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgTGVnYWN5QW55Ojpj
cmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIHJlcXVlc3QtPnNldEN1cnNv
ckRldGFpbHMoSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlPbmx5LCBkaXJlY3Rpb24pOwotICAg
IGJhY2tlbmREQigpLT5vcGVuQ3Vyc29yKG1fdHJhbnNhY3Rpb24tPmlkKCksIG1fb2JqZWN0U3Rv
cmUtPmlkKCksIG1fbWV0YWRhdGEuaWQsIGtleVJhbmdlLCBkaXJlY3Rpb24sIHRydWUsIElEQkRh
dGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJlcXVlc3Q7
Ci19Ci0KLVJlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJbmRleDo6b3BlbktleUN1cnNvcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1
ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUluZGV4OjpvcGVuS2V5Q3Vyc29y
Iik7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5
KGNvbnRleHQsIGtleSwgZWMuY29kZSk7Ci0gICAgaWYgKGVjLmNvZGUpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBvcGVuS2V5Q3Vyc29yKGNvbnRleHQsIGtleVJhbmdlLmdldCgpLCBk
aXJlY3Rpb24sIGVjKTsKLX0KLQotUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeUluZGV4OjpnZXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0
VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coU3Rv
cmFnZUFQSSwgIkxlZ2FjeUluZGV4OjpnZXQiKTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYy5jb2RlKTsKLSAgICBp
ZiAoZWMuY29kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGdldChjb250ZXh0LCBr
ZXlSYW5nZS5nZXQoKSwgZWMpOwotfQotCi1SZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5SW5kZXg6
OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJREJLZXlSYW5nZSoga2V5UmFu
Z2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEks
ICJMZWdhY3lJbmRleDo6Z2V0Iik7Ci0gICAgaWYgKG1fZGVsZXRlZCkgewotICAgICAgICBlYy5j
b2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Ci0g
ICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25JbmFjdGl2
ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFrZXlSYW5nZSkgewot
ICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUmVmUHRyPExlZ2FjeVJlcXVlc3Q+IHJlcXVlc3Qg
PSBMZWdhY3lSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgTGVnYWN5QW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIGJhY2tlbmREQigpLT5nZXQobV90cmFuc2FjdGlv
bi0+aWQoKSwgbV9vYmplY3RTdG9yZS0+aWQoKSwgbV9tZXRhZGF0YS5pZCwga2V5UmFuZ2UsIGZh
bHNlLCByZXF1ZXN0KTsKLSAgICByZXR1cm4gcmVxdWVzdDsKLX0KLQotUmVmUHRyPElEQlJlcXVl
c3Q+IExlZ2FjeUluZGV4OjpnZXRLZXkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUluZGV4OjpnZXRLZXkiKTsK
LSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoY29u
dGV4dCwga2V5LCBlYy5jb2RlKTsKLSAgICBpZiAoZWMuY29kZSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gZ2V0S2V5KGNvbnRleHQsIGtleVJhbmdlLmdldCgpLCBlYyk7Ci19Ci0K
LVJlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIElEQktleVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeUluZGV4OjpnZXRLZXki
KTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAg
ICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJl
dHVybiAwOwotICAgIH0KLSAgICBpZiAoIWtleVJhbmdlKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9IExlZ2FjeVJlcXVlc3Q6OmNy
ZWF0ZShjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQo
KSk7Ci0gICAgYmFja2VuZERCKCktPmdldChtX3RyYW5zYWN0aW9uLT5pZCgpLCBtX29iamVjdFN0
b3JlLT5pZCgpLCBtX21ldGFkYXRhLmlkLCBrZXlSYW5nZSwgdHJ1ZSwgcmVxdWVzdCk7Ci0gICAg
cmV0dXJuIHJlcXVlc3Q7Ci19Ci0KLUlEQkRhdGFiYXNlQmFja2VuZCogTGVnYWN5SW5kZXg6OmJh
Y2tlbmREQigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmREQigp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xlZ2FjeS9MZWdhY3lJbmRleC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeUluZGV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiNzEz
MWMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5
L0xlZ2FjeUluZGV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgTGVnYWN5SW5kZXhfaAotI2RlZmluZSBMZWdhY3lJbmRleF9oCi0KLSNpbmNsdWRlICJJ
REJDdXJzb3IuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIklEQkRhdGFi
YXNlTWV0YWRhdGEuaCIKLSNpbmNsdWRlICJJREJLZXlQYXRoLmgiCi0jaW5jbHVkZSAiSURCS2V5
UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiTGVnYWN5QW55Lmgi
Ci0jaW5jbHVkZSAiTGVnYWN5T2JqZWN0U3RvcmUuaCIKLSNpbmNsdWRlICJMZWdhY3lSZXF1ZXN0
LmgiCi0jaW5jbHVkZSAiTGVnYWN5VHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJTY3JpcHRXcmFw
cGFibGUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgSURCT2JqZWN0U3RvcmU7Ci0KLWNsYXNzIExlZ2FjeUluZGV4IDog
cHVibGljIFNjcmlwdFdyYXBwYWJsZSwgcHVibGljIElEQkluZGV4IHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPExlZ2FjeUluZGV4PiBjcmVhdGUoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYgbWV0
YWRhdGEsIExlZ2FjeU9iamVjdFN0b3JlKiBvYmplY3RTdG9yZSwgTGVnYWN5VHJhbnNhY3Rpb24q
IHRyYW5zYWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTGVnYWN5
SW5kZXgobWV0YWRhdGEsIG9iamVjdFN0b3JlLCB0cmFuc2FjdGlvbikpOwotICAgIH0KLSAgICB+
TGVnYWN5SW5kZXgoKTsKLQotICAgIC8vIEltcGxlbWVudCB0aGUgSURMCi0gICAgdmlydHVhbCBj
b25zdCBTdHJpbmcmIG5hbWUoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX21ldGFk
YXRhLm5hbWU7IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3Rv
cmUoKSBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX29iamVjdFN0b3JlOyB9Ci0gICAgTGVnYWN5
T2JqZWN0U3RvcmUqIGxlZ2FjeU9iamVjdFN0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RT
dG9yZS5nZXQoKTsgfQotICAgIHZpcnR1YWwgUmVmUHRyPElEQkFueT4ga2V5UGF0aEFueSgpIGNv
bnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIExlZ2FjeUFueTo6Y3JlYXRlKG1fbWV0YWRhdGEu
a2V5UGF0aCk7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgoKSBjb25z
dCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiBtX21ldGFkYXRhLmtleVBhdGg7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgdW5pcXVlKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gbV9tZXRhZGF0
YS51bmlxdWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgbXVsdGlFbnRyeSgpIGNvbnN0IG92ZXJyaWRl
IGZpbmFsIHsgcmV0dXJuIG1fbWV0YWRhdGEubXVsdGlFbnRyeTsgfQotICAgIGludDY0X3QgaWQo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9Ci0KLSAgICAvLyBGSVhNRTogVHJ5IHRv
IG1vZGlmeSB0aGUgY29kZSBnZW5lcmF0b3Igc28gdGhpcyBpcyB1bm5lZWRlZC4KLSAgICB2aXJ0
dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIG92ZXJyaWRlIGZpbmFsIHsg
cmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPihudWxs
cHRyKSwgZWMpOyB9Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJREJLZXlSYW5nZSoga2V5UmFuZ2UsIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG9wZW5D
dXJzb3IoY29udGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7
IH0KLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXks
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG9w
ZW5DdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9
Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgSURCS2V5UmFuZ2UqLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJikgb3ZlcnJpZGUgZmluYWw7Ci0gICAgdmlydHVhbCBSZWZQdHI8
SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVw
cmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYpIG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgUmVmUHRy
PElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpIG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIGNvdW50KGNv
bnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4obnVsbHB0ciksIGVjKTsgfQotICAgIHZp
cnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBJ
REJLZXlSYW5nZSosIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpIG92ZXJyaWRlIGZpbmFsOwot
ICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmKSBvdmVycmlkZSBmaW5hbDsKLQotICAgIHZpcnR1YWwgUmVmUHRyPElEQlJlcXVl
c3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0
aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gb3BlbktleUN1
cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KG51bGxwdHIpLCBlYyk7IH0K
LSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIElEQktleVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gb3BlbktleUN1cnNvcihj
b250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQotICAg
IHZpcnR1YWwgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhj
ZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykgb3ZlcnJpZGUgZmluYWwgeyByZXR1cm4gb3Blbktl
eUN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0K
LSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBJREJLZXlSYW5nZSosIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIFJlZlB0
cjxJREJSZXF1ZXN0PiBvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgb3ZlcnJpZGUgZmluYWw7Ci0KLSAgICB2aXJ0dWFs
IFJlZlB0cjxJREJSZXF1ZXN0PiBnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIElEQktleVJh
bmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgb3ZlcnJpZGUgZmluYWw7Ci0gICAgdmly
dHVhbCBSZWZQdHI8SURCUmVxdWVzdD4gZ2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25z
dCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
KSBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJSZXF1ZXN0PiBnZXRLZXko
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhN
ZXNzYWdlJikgb3ZlcnJpZGUgZmluYWw7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURCUmVxdWVzdD4g
Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBvdmVycmlkZSBmaW5hbDsKLQot
ICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9IHRydWU7IH0KLQotICAgIElEQkRh
dGFiYXNlQmFja2VuZCogYmFja2VuZERCKCkgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgcmVm
KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRlcmVmKCkgb3ZlcnJpZGU7Ci0KLXByaXZh
dGU6Ci0gICAgTGVnYWN5SW5kZXgoY29uc3QgSURCSW5kZXhNZXRhZGF0YSYsIExlZ2FjeU9iamVj
dFN0b3JlKiwgTGVnYWN5VHJhbnNhY3Rpb24qKTsKLQotICAgIElEQkluZGV4TWV0YWRhdGEgbV9t
ZXRhZGF0YTsKLSAgICBSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+IG1fb2JqZWN0U3RvcmU7Ci0g
ICAgUmVmUHRyPExlZ2FjeVRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotICAgIGJvb2wgbV9k
ZWxldGVkOwotCi0gICAgdW5zaWduZWQgbV9yZWZDb3VudCB7IDEgfTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCi0KLSNlbmRpZiAvLyBMZWdhY3lJbmRleF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T2Jq
ZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xl
Z2FjeU9iamVjdFN0b3JlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU5NGMy
NC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5T2JqZWN0U3RvcmUuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTgyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGVnYWN5T2JqZWN0U3RvcmUuaCIK
LQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlz
dC5oIgotI2luY2x1ZGUgIklEQkFueS5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWUuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFz
ZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiSURCS2V5
LmgiCi0jaW5jbHVkZSAiSURCS2V5RGF0YS5oIgotI2luY2x1ZGUgIklEQktleVBhdGguaCIKLSNp
bmNsdWRlICJJREJLZXlSYW5nZS5oIgotI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCi0jaW5j
bHVkZSAiTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmgiCi0jaW5jbHVkZSAiTGVnYWN5SW5kZXguaCIK
LSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUxlZ2FjeU9iamVjdFN0b3JlOjpMZWdh
Y3lPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSwgTGVn
YWN5VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotICAgIDogbV9tZXRhZGF0YShtZXRhZGF0YSkK
LSAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAgLCBtX2RlbGV0ZWQoZmFsc2Up
Ci17Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOwotICAgIC8vIFdlIHBhc3MgYSByZWZlcmVu
Y2UgdG8gdGhpcyBvYmplY3QgYmVmb3JlIGl0IGNhbiBiZSBhZG9wdGVkLgotICAgIHJlbGF4QWRv
cHRpb25SZXF1aXJlbWVudCgpOwotfQotCi1SZWZQdHI8RE9NU3RyaW5nTGlzdD4gTGVnYWN5T2Jq
ZWN0U3RvcmU6OmluZGV4TmFtZXMoKSBjb25zdAotewotICAgIExPRyhTdG9yYWdlQVBJLCAiTGVn
YWN5T2JqZWN0U3RvcmU6OmluZGV4TmFtZXMiKTsKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4g
aW5kZXhOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIGZvciAoYXV0byYgaW5k
ZXggOiBtX21ldGFkYXRhLmluZGV4ZXMudmFsdWVzKCkpCi0gICAgICAgIGluZGV4TmFtZXMtPmFw
cGVuZChpbmRleC5uYW1lKTsKLSAgICBpbmRleE5hbWVzLT5zb3J0KCk7Ci0gICAgcmV0dXJuIGlu
ZGV4TmFtZXMucmVsZWFzZSgpOwotfQotCi1SZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0
U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJREJLZXlSYW5nZSog
a2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKFN0b3Jh
Z2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6Z2V0Iik7Ci0gICAgaWYgKG1fZGVsZXRlZCkgewot
ICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9y
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFrZXlSYW5nZSkgewotICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVF
cnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0
PiByZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIExlZ2FjeUFueTo6Y3Jl
YXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBiYWNrZW5kREIoKS0+Z2V0KG1f
dHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCwga2V5
UmFuZ2UsIGZhbHNlLCByZXF1ZXN0KTsKLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19
Ci0KLVJlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6Z2V0KFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXks
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQktleVJhbmdl
PiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwgZWMuY29kZSk7Ci0g
ICAgaWYgKGVjLmNvZGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZXQoY29udGV4
dCwga2V5UmFuZ2UuZ2V0KCksIGVjKTsKLX0KLQotUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9i
amVjdFN0b3JlOjphZGQoSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUs
IEpTQzo6SlNWYWx1ZSBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAg
TE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6YWRkIik7Ci0gICAgYXV0byBkZXBy
ZWNhdGVkVmFsdWUgPSBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShzdGF0ZS52bSgpLCB2YWx1ZSk7
Ci0gICAgYXV0byBkS2V5ID0gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoc3RhdGUudm0oKSwga2V5
KTsKLSAgICByZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT25seSwgTGVnYWN5QW55
OjpjcmVhdGUodGhpcyksIHN0YXRlLCBkZXByZWNhdGVkVmFsdWUsIGRLZXksIGVjKTsKLX0KLQot
UmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjphZGQoSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OkpTVmFsdWUgdmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMp
Ci17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6YWRkIik7Ci0gICAg
YXV0byBkZXByZWNhdGVkVmFsdWUgPSBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZShzdGF0ZS52bSgp
LCB2YWx1ZSk7Ci0gICAgcmV0dXJuIHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OkFkZE9ubHksIExl
Z2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgZGVwcmVjYXRlZFZhbHVlLCBzdGF0aWNfY2Fz
dDxJREJLZXkqPihudWxscHRyKSwgZWMpOwotfQotCi1SZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5
T2JqZWN0U3RvcmU6OnB1dChKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6SlNWYWx1ZSB2YWx1
ZSwgSlNDOjpKU1ZhbHVlIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAg
ICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjpwdXQiKTsKLSAgICBhdXRvIGRl
cHJlY2F0ZWRWYWx1ZSA9IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlKHN0YXRlLnZtKCksIHZhbHVl
KTsKLSAgICByZXR1cm4gcHV0KElEQkRhdGFiYXNlQmFja2VuZDo6QWRkT3JVcGRhdGUsIExlZ2Fj
eUFueTo6Y3JlYXRlKHRoaXMpLCBzdGF0ZSwgZGVwcmVjYXRlZFZhbHVlLCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZShzdGF0ZS52bSgpLCBrZXkpLCBlYyk7Ci19Ci0KLVJlZlB0cjxJREJSZXF1ZXN0
PiBMZWdhY3lPYmplY3RTdG9yZTo6cHV0KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpKU1Zh
bHVlIHZhbHVlLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIExPRyhTdG9y
YWdlQVBJLCAiTGVnYWN5T2JqZWN0U3RvcmU6OnB1dCIpOwotICAgIGF1dG8gZGVwcmVjYXRlZFZh
bHVlID0gRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUoc3RhdGUudm0oKSwgdmFsdWUpOwotICAgIHJl
dHVybiBwdXQoSURCRGF0YWJhc2VCYWNrZW5kOjpBZGRPclVwZGF0ZSwgTGVnYWN5QW55OjpjcmVh
dGUodGhpcyksIHN0YXRlLCBkZXByZWNhdGVkVmFsdWUsIHN0YXRpY19jYXN0PElEQktleSo+KG51
bGxwdHIpLCBlYyk7Ci19Ci0KLVJlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6
cHV0KElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBSZWZQdHI8TGVnYWN5QW55
PiBzb3VyY2UsIEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IHZhbHVlLCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5VmFsdWUsIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHRGcm9tRXhlY1N0YXRlKCZzdGF0ZSk7Ci0gICAg
RE9NUmVxdWVzdFN0YXRlIHJlcXVlc3RTdGF0ZShjb250ZXh0KTsKLSAgICBSZWZQdHI8SURCS2V5
PiBrZXkgPSBzY3JpcHRWYWx1ZVRvSURCS2V5KCZyZXF1ZXN0U3RhdGUsIGtleVZhbHVlKTsKLSAg
ICByZXR1cm4gcHV0KHB1dE1vZGUsIHNvdXJjZSwgc3RhdGUsIHZhbHVlLCBrZXkucmVsZWFzZSgp
LCBlYyk7Ci19Ci0KLVJlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6cHV0KElE
QkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZSBwdXRNb2RlLCBSZWZQdHI8TGVnYWN5QW55PiBzb3Vy
Y2UsIEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIHZhbHVl
LCBSZWZQdHI8SURCS2V5PiBwcnBLZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17
Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gcHJwS2V5OwotICAgIGlmIChtX2RlbGV0ZWQpIHsK
LSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJv
cjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlv
bi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFkT25seUVycm9yOwotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJp
YWxpemVkVmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZSgmc3RhdGUsIHZhbHVl
LmpzVmFsdWUoKSwgbnVsbHB0ciwgbnVsbHB0cik7Ci0gICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlv
bigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChzZXJpYWxpemVkVmFsdWUt
Pmhhc0Jsb2JVUkxzKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxp
c3Qgc3VwcG9ydAotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFD
bG9uZUVycm9yOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBjb25zdCBJ
REJLZXlQYXRoJiBrZXlQYXRoID0gbV9tZXRhZGF0YS5rZXlQYXRoOwotICAgIGNvbnN0IGJvb2wg
dXNlc0luTGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKLSAgICBjb25zdCBib29sIGhhc0tl
eUdlbmVyYXRvciA9IGF1dG9JbmNyZW1lbnQoKTsKLQotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0RnJvbUV4ZWNTdGF0ZSgmc3RhdGUp
OwotICAgIERPTVJlcXVlc3RTdGF0ZSByZXF1ZXN0U3RhdGUoY29udGV4dCk7Ci0KLSAgICBpZiAo
cHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmQ6OkN1cnNvclVwZGF0ZSAmJiB1c2VzSW5MaW5l
S2V5cyAmJiBrZXkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
YXRhRXJyb3I7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBpZiAoIXVzZXNJ
bkxpbmVLZXlzICYmICFoYXNLZXlHZW5lcmF0b3IgJiYgIWtleSkgewotICAgICAgICBlYy5jb2Rl
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotICAgIGlmICh1c2VzSW5MaW5lS2V5cykgewotICAgICAgICBSZWZQdHI8SURC
S2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNjcmlwdFZhbHVlQW5kS2V5UGF0aChy
ZXF1ZXN0U3RhdGUuZXhlYygpLCB2YWx1ZSwga2V5UGF0aCk7Ci0gICAgICAgIGlmIChrZXlQYXRo
S2V5ICYmICFrZXlQYXRoS2V5LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIGVjLmNvZGUgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVycm9yOwotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFoYXNLZXlHZW5lcmF0b3IgJiYgIWtleVBhdGhL
ZXkpIHsKLSAgICAgICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0YUVy
cm9yOwotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGhhc0tleUdlbmVyYXRvciAmJiAha2V5UGF0aEtleSkgewotICAgICAgICAgICAgaWYgKCFjYW5J
bmplY3RJREJLZXlJbnRvU2NyaXB0VmFsdWUoJnJlcXVlc3RTdGF0ZSwgdmFsdWUsIGtleVBhdGgp
KSB7Ci0gICAgICAgICAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEYXRh
RXJyb3I7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGtleVBhdGhLZXkpCi0gICAgICAgICAgICBrZXkgPSBrZXlQ
YXRoS2V5OwotICAgIH0KLSAgICBpZiAoa2V5ICYmICFrZXktPmlzVmFsaWQoKSkgewotICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRhdGFFcnJvcjsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzOwotICAg
IFZlY3RvcjxJbmRleEtleXM+IGluZGV4S2V5czsKLSAgICBmb3IgKGF1dG8mIGluZGV4IDogbV9t
ZXRhZGF0YS5pbmRleGVzKSB7Ci0gICAgICAgIFZlY3RvcjxJREJLZXlEYXRhPiBrZXlEYXRhczsK
LSAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShyZXF1ZXN0U3RhdGUuZXhlYygpLCBp
bmRleC52YWx1ZSwgdmFsdWUsIGtleURhdGFzKTsKLSAgICAgICAgaW5kZXhJZHMuYXBwZW5kKGlu
ZGV4LmtleSk7Ci0KLSAgICAgICAgLy8gRklYTUU6IE11Y2ggb2YgdGhlIEluZGV4ZWQgREIgY29k
ZSBuZWVkcyB0byB1c2UgSURCS2V5RGF0YSBkaXJlY3RseSB0byBhdm9pZCB3YXN0ZWZ1bCBjb252
ZXJzaW9ucyBsaWtlIHRoaXMuCi0gICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4ga2V5czsK
LSAgICAgICAgZm9yIChhdXRvJiBrZXlEYXRhIDoga2V5RGF0YXMpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxJREJLZXk+IGtleSA9IGtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKTsKLSAgICAgICAg
ICAgIGlmIChrZXkpCi0gICAgICAgICAgICAgICAga2V5cy5hcHBlbmQoa2V5LnJlbGVhc2UoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXlzKTsKLSAgICB9Ci0KLSAg
ICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9IExlZ2FjeVJlcXVlc3Q6OmNyZWF0ZShj
b250ZXh0LCBzb3VyY2UsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIFZlY3Rvcjx1aW50OF90
PiB2YWx1ZUJ5dGVzID0gc2VyaWFsaXplZFZhbHVlLT50b1dpcmVCeXRlcygpOwotICAgIC8vIFRo
aXMgaXMgYSBoYWNrIHRvIGFjY291bnQgZm9yIGRpc2FncmVlbWVudHMgYWJvdXQgd2hldGhlciBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUgc2hvdWxkIGRlYWwgaW4gVmVjdG9yPHVpbnQ4X3Q+IG9yIFZl
Y3RvcjxjaGFyPi4KLSAgICAvLyBTZWUgaHR0cHM6Ly9saXN0cy53ZWJraXQub3JnL3BpcGVybWFp
bC93ZWJraXQtZGV2LzIwMTMtRmVicnVhcnkvMDIzNjgyLmh0bWwKLSAgICBWZWN0b3I8Y2hhcj4q
IHZhbHVlQnl0ZXNTaWduZWQgPSByZWludGVycHJldF9jYXN0PFZlY3RvcjxjaGFyPio+KCZ2YWx1
ZUJ5dGVzKTsKLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZUJ1ZmZlciA9IFNoYXJlZEJ1
ZmZlcjo6YWRvcHRWZWN0b3IoKnZhbHVlQnl0ZXNTaWduZWQpOwotICAgIGJhY2tlbmREQigpLT5w
dXQobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgdmFsdWVCdWZmZXIsIGtleS5yZWxlYXNlKCks
IHN0YXRpY19jYXN0PElEQkRhdGFiYXNlQmFja2VuZDo6UHV0TW9kZT4ocHV0TW9kZSksIHJlcXVl
c3QsIGluZGV4SWRzLCBpbmRleEtleXMpOwotICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsK
LX0KLQotUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBJREJLZXlSYW5nZSoga2V5UmFuZ2Us
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJM
ZWdhY3lPYmplY3RTdG9yZTo6ZGVsZXRlIik7Ci0gICAgaWYgKG1fZGVsZXRlZCkgewotICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRTdGF0ZUVycm9yOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgp
KSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VHJhbnNhY3Rpb25J
bmFjdGl2ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG1fdHJhbnNh
Y3Rpb24tPmlzUmVhZE9ubHkoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlJlYWRPbmx5RXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAo
IWtleVJhbmdlKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6RGF0
YUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8TGVnYWN5UmVx
dWVzdD4gcmVxdWVzdCA9IExlZ2FjeVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBMZWdhY3lBbnk6
OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgYmFja2VuZERCKCktPmRl
bGV0ZVJhbmdlKG1fdHJhbnNhY3Rpb24tPmlkKCksIGlkKCksIGtleVJhbmdlLCByZXF1ZXN0KTsK
LSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Ci19Ci0KLVJlZlB0cjxJREJSZXF1ZXN0PiBM
ZWdhY3lPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0g
SURCS2V5UmFuZ2U6Om9ubHkoY29udGV4dCwga2V5LCBlYy5jb2RlKTsKLSAgICBpZiAoZWMuY29k
ZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGRlbGV0ZUZ1bmN0aW9uKGNvbnRleHQs
IGtleVJhbmdlLmdldCgpLCBlYyk7Ci19Ci0KLVJlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmpl
Y3RTdG9yZTo6Y2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9iamVj
dFN0b3JlOjpjbGVhciIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMuY29kZSA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAg
ICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJv
cjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc1Jl
YWRPbmx5KCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSZWFk
T25seUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8TGVnYWN5
UmVxdWVzdD4gcmVxdWVzdCA9IExlZ2FjeVJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBMZWdhY3lB
bnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgYmFja2VuZERCKCkt
PmNsZWFyT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgcmVxdWVzdCk7Ci0g
ICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQotCi1uYW1lc3BhY2UgewotLy8gVGhpcyBj
bGFzcyBjcmVhdGVzIHRoZSBpbmRleCBrZXlzIGZvciBhIGdpdmVuIGluZGV4IGJ5IGV4dHJhY3Rp
bmcKLS8vIHRoZW0gZnJvbSB0aGUgU2VyaWFsaXplZFNjcmlwdFZhbHVlLCBmb3IgYWxsIHRoZSBl
eGlzdGluZyB2YWx1ZXMgaW4KLS8vIHRoZSBvYmplY3RTdG9yZS4gSXQgb25seSBuZWVkcyB0byBi
ZSBrZXB0IGFsaXZlIGJ5IHZpcnR1ZSBvZiBiZWluZwotLy8gYSBsaXN0ZW5lciBvbiBhbiBJREJS
ZXF1ZXN0IG9iamVjdCwgaW4gdGhlIHNhbWUgd2F5IHRoYXQgSmF2YVNjcmlwdAotLy8gY3Vyc29y
IHN1Y2Nlc3MgaGFuZGxlcnMgYXJlIGtlcHQgYWxpdmUuCi1jbGFzcyBJbmRleFBvcHVsYXRvciA6
IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEluZGV4UG9w
dWxhdG9yPiBjcmVhdGUoUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gYmFja2VuZCwgaW50NjRf
dCB0cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQkluZGV4TWV0
YWRhdGEmIGluZGV4TWV0YWRhdGEpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJbmRleFBvcHVsYXRvcihiYWNrZW5kLCB0cmFuc2FjdGlvbklkLCBvYmplY3RTdG9yZUlkLCBp
bmRleE1ldGFkYXRhKSk7Ci0gICAgfQotCi0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29u
c3QgRXZlbnRMaXN0ZW5lciYgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcyA9PSAm
b3RoZXI7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIEluZGV4UG9wdWxhdG9yKFJlZlB0cjxJREJE
YXRhYmFzZUJhY2tlbmQ+IGJhY2tlbmQsIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBJREJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhKQotICAg
ICAgICA6IEV2ZW50TGlzdGVuZXIoQ1BQRXZlbnRMaXN0ZW5lclR5cGUpCi0gICAgICAgICwgbV9k
YXRhYmFzZUJhY2tlbmQoYmFja2VuZCkKLSAgICAgICAgLCBtX3RyYW5zYWN0aW9uSWQodHJhbnNh
Y3Rpb25JZCkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKLSAgICAg
ICAgLCBtX2luZGV4TWV0YWRhdGEoaW5kZXhNZXRhZGF0YSkKLSAgICB7Ci0gICAgfQotCi0gICAg
dmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCog
ZXZlbnQpCi0gICAgewotICAgICAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVz
KCkuc3VjY2Vzc0V2ZW50KTsKLSAgICAgICAgRXZlbnRUYXJnZXQqIHRhcmdldCA9IGV2ZW50LT50
YXJnZXQoKTsKLSAgICAgICAgTGVnYWN5UmVxdWVzdCogcmVxdWVzdCA9IHN0YXRpY19jYXN0PExl
Z2FjeVJlcXVlc3QqPih0YXJnZXQpOwotCi0gICAgICAgIFJlZlB0cjxMZWdhY3lBbnk+IGN1cnNv
ckFueSA9IHJlcXVlc3QtPmxlZ2FjeVJlc3VsdChBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICAg
ICAgUmVmUHRyPExlZ2FjeUN1cnNvcldpdGhWYWx1ZT4gY3Vyc29yOwotICAgICAgICBpZiAoY3Vy
c29yQW55LT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJDdXJzb3JXaXRoVmFsdWUpCi0gICAg
ICAgICAgICBjdXJzb3IgPSBjdXJzb3JBbnktPmxlZ2FjeUN1cnNvcldpdGhWYWx1ZSgpOwotCi0g
ICAgICAgIFZlY3RvcjxpbnQ2NF90LCAxPiBpbmRleElkczsKLSAgICAgICAgaW5kZXhJZHMuYXBw
ZW5kKG1faW5kZXhNZXRhZGF0YS5pZCk7Ci0gICAgICAgIGlmIChjdXJzb3IpIHsKLSAgICAgICAg
ICAgIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSBlYzsKLSAgICAgICAgICAgIGN1cnNvci0+Y29u
dGludWVGdW5jdGlvbihzdGF0aWNfY2FzdDxJREJLZXkqPihudWxscHRyKSwgZWMpOwotICAgICAg
ICAgICAgQVNTRVJUKCFlYy5jb2RlKTsKLQotICAgICAgICAgICAgUmVmUHRyPElEQktleT4gcHJp
bWFyeUtleSA9IGN1cnNvci0+aWRiUHJpbWFyeUtleSgpOwotICAgICAgICAgICAgRGVwcmVjYXRl
ZDo6U2NyaXB0VmFsdWUgdmFsdWUgPSBjdXJzb3ItPnZhbHVlKCk7Ci0KLSAgICAgICAgICAgIFZl
Y3RvcjxJREJLZXlEYXRhPiBpbmRleEtleURhdGFzOwotICAgICAgICAgICAgZ2VuZXJhdGVJbmRl
eEtleXNGb3JWYWx1ZShyZXF1ZXN0LT5yZXF1ZXN0U3RhdGUoKS0+ZXhlYygpLCBtX2luZGV4TWV0
YWRhdGEsIHZhbHVlLCBpbmRleEtleURhdGFzKTsKLQotICAgICAgICAgICAgVmVjdG9yPFJlZlB0
cjxJREJLZXk+PiBpbmRleEtleXM7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGluZGV4S2V5RGF0
YSA6IGluZGV4S2V5RGF0YXMpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXkg
PSBpbmRleEtleURhdGEubWF5YmVDcmVhdGVJREJLZXkoKTsKLSAgICAgICAgICAgICAgICBpZiAo
a2V5KQotICAgICAgICAgICAgICAgICAgICBpbmRleEtleXMuYXBwZW5kKGtleS5yZWxlYXNlKCkp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVmVjdG9yPExlZ2FjeU9iamVjdFN0b3JlOjpJ
bmRleEtleXMsIDE+IGluZGV4S2V5c0xpc3Q7Ci0gICAgICAgICAgICBpbmRleEtleXNMaXN0LmFw
cGVuZChpbmRleEtleXMpOwotCi0gICAgICAgICAgICBtX2RhdGFiYXNlQmFja2VuZC0+c2V0SW5k
ZXhLZXlzKG1fdHJhbnNhY3Rpb25JZCwgbV9vYmplY3RTdG9yZUlkLCBwcmltYXJ5S2V5LCBpbmRl
eElkcywgaW5kZXhLZXlzTGlzdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBO
b3cgdGhhdCB3ZSBhcmUgZG9uZSBpbmRleGluZywgdGVsbCB0aGUgYmFja2VuZCB0byBnbwotICAg
ICAgICAgICAgLy8gYmFjayB0byBwcm9jZXNzaW5nIHRhc2tzIG9mIHR5cGUgTm9ybWFsVGFzay4K
LSAgICAgICAgICAgIG1fZGF0YWJhc2VCYWNrZW5kLT5zZXRJbmRleGVzUmVhZHkobV90cmFuc2Fj
dGlvbklkLCBtX29iamVjdFN0b3JlSWQsIGluZGV4SWRzKTsKLSAgICAgICAgICAgIG1fZGF0YWJh
c2VCYWNrZW5kID0gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZD4gbV9kYXRhYmFzZUJhY2tlbmQ7Ci0gICAgY29uc3QgaW50NjRfdCBt
X3RyYW5zYWN0aW9uSWQ7Ci0gICAgY29uc3QgaW50NjRfdCBtX29iamVjdFN0b3JlSWQ7Ci0gICAg
Y29uc3QgSURCSW5kZXhNZXRhZGF0YSBtX2luZGV4TWV0YWRhdGE7Ci19OwotfQotCi1SZWZQdHI8
SURCSW5kZXg+IExlZ2FjeU9iamVjdFN0b3JlOjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtl
eVBhdGgsIGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2Fn
ZSYgZWMpCi17Ci0gICAgYm9vbCB1bmlxdWUgPSBmYWxzZTsKLSAgICBvcHRpb25zLmdldCgidW5p
cXVlIiwgdW5pcXVlKTsKLQotICAgIGJvb2wgbXVsdGlFbnRyeSA9IGZhbHNlOwotICAgIG9wdGlv
bnMuZ2V0KCJtdWx0aUVudHJ5IiwgbXVsdGlFbnRyeSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlSW5k
ZXgoY29udGV4dCwgbmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCBlYyk7Ci19Ci0K
LVJlZlB0cjxJREJJbmRleD4gTGVnYWN5T2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeU9iamVjdFN0
b3JlOjpjcmVhdGVJbmRleCIpOwotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNWZXJzaW9uQ2hh
bmdlKCkgfHwgbV9kZWxldGVkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBp
ZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICBpZiAoIWtleVBhdGguaXNWYWxpZCgpKSB7Ci0gICAgICAgIGVjLmNv
ZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6U3ludGF4RXJyb3I7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLSAgICBpZiAobmFtZS5pc051bGwoKSkgewotICAgICAgICBlYy5jb2RlID0gVHlw
ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKGNvbnRhaW5zSW5kZXgo
bmFtZSkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDb25zdHJh
aW50RXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmIChrZXlQYXRoLnR5
cGUoKSA9PSBJbmRleGVkREI6OktleVBhdGhUeXBlOjpBcnJheSAmJiBtdWx0aUVudHJ5KSB7Ci0g
ICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZEFjY2Vzc0Vycm9y
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpbnQ2NF90IGluZGV4SWQgPSBtX21l
dGFkYXRhLm1heEluZGV4SWQgKyAxOwotICAgIGJhY2tlbmREQigpLT5jcmVhdGVJbmRleChtX3Ry
YW5zYWN0aW9uLT5pZCgpLCBpZCgpLCBpbmRleElkLCBuYW1lLCBrZXlQYXRoLCB1bmlxdWUsIG11
bHRpRW50cnkpOwotCi0gICAgKyttX21ldGFkYXRhLm1heEluZGV4SWQ7Ci0KLSAgICBJREJJbmRl
eE1ldGFkYXRhIG1ldGFkYXRhKG5hbWUsIGluZGV4SWQsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlF
bnRyeSk7Ci0gICAgUmVmUHRyPExlZ2FjeUluZGV4PiBpbmRleCA9IExlZ2FjeUluZGV4OjpjcmVh
dGUobWV0YWRhdGEsIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1faW5kZXhNYXAu
c2V0KG5hbWUsIGluZGV4KTsKLSAgICBtX21ldGFkYXRhLmluZGV4ZXMuc2V0KGluZGV4SWQsIG1l
dGFkYXRhKTsKLQotICAgIEFTU0VSVCghZWMuY29kZSk7Ci0gICAgaWYgKGVjLmNvZGUpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0KTsKLSAg
ICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwotfQotCi1SZWZQdHI8SURCSW5kZXg+IExlZ2FjeU9i
amVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVz
c2FnZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9yZTo6aW5k
ZXgiKTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjLmNvZGUgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNGaW5pc2hlZCgpKSB7Ci0gICAgICAgIGVjLmNvZGUg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAu
ZmluZChuYW1lKTsKLSAgICBpZiAoaXQgIT0gbV9pbmRleE1hcC5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGl0LT52YWx1ZTsKLQotICAgIGludDY0X3QgaW5kZXhJZCA9IGZpbmRJbmRleElkKG5hbWUp
OwotICAgIGlmIChpbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewotICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5vdEZvdW5kRXJyb3I7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEqIGluZGV4
TWV0YWRhdGEobnVsbHB0cik7Ci0gICAgZm9yIChhdXRvJiBpbmRleCA6IG1fbWV0YWRhdGEuaW5k
ZXhlcy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoaW5kZXgubmFtZSA9PSBuYW1lKSB7Ci0gICAg
ICAgICAgICBpbmRleE1ldGFkYXRhID0gJmluZGV4OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUKGluZGV4TWV0YWRhdGEpOwotICAgIEFTU0VSVChpbmRl
eE1ldGFkYXRhLT5pZCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOwotCi0gICAgUmVm
UHRyPExlZ2FjeUluZGV4PiBpbmRleCA9IExlZ2FjeUluZGV4OjpjcmVhdGUoKmluZGV4TWV0YWRh
dGEsIHRoaXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1faW5kZXhNYXAuc2V0KG5hbWUs
IGluZGV4KTsKLSAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwotfQotCi12b2lkIExlZ2FjeU9i
amVjdFN0b3JlOjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGVX
aXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RTdG9y
ZTo6ZGVsZXRlSW5kZXgiKTsKLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzVmVyc2lvbkNoYW5n
ZSgpIHx8IG1fZGVsZXRlZCkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkludmFsaWRTdGF0ZUVycm9yOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgh
bV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpbnQ2NF90IGluZGV4SWQgPSBmaW5kSW5kZXhJZChuYW1lKTsKLSAgICBpZiAo
aW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgYmFja2VuZERCKCktPmRlbGV0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmlk
KCksIGlkKCksIGluZGV4SWQpOwotCi0gICAgbV9tZXRhZGF0YS5pbmRleGVzLnJlbW92ZShpbmRl
eElkKTsKLSAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFt
ZSk7Ci0gICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpIHsKLSAgICAgICAgaXQtPnZhbHVl
LT5tYXJrRGVsZXRlZCgpOwotICAgICAgICBtX2luZGV4TWFwLnJlbW92ZShuYW1lKTsKLSAgICB9
Ci19Ci0KLVJlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
IGVjKQotewotICAgIHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktl
eVJhbmdlKj4obnVsbHB0ciksIGVjKTsKLX0KLQotUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9i
amVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIElE
QktleVJhbmdlKiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAg
ICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpkaXJlY3Rp
b25OZXh0KCksIGVjKTsKLX0KLQotUmVmUHRyPElEQlJlcXVlc3Q+IExlZ2FjeU9iamVjdFN0b3Jl
OjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJl
Y2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17
Ci0gICAgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlv
bk5leHQoKSwgZWMpOwotfQotCi1SZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6
Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgSURCS2V5UmFuZ2Uq
IHJhbmdlLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
JiBlYykKLXsKLSAgICByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCByYW5nZSwgZGlyZWN0aW9u
LCBJREJEYXRhYmFzZUJhY2tlbmQ6Ok5vcm1hbFRhc2ssIGVjKTsKLX0KLQotUmVmUHRyPElEQlJl
cXVlc3Q+IExlZ2FjeU9iamVjdFN0b3JlOjpvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIElEQktleVJhbmdlKiByYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25T
dHJpbmcsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lPYmplY3RT
dG9yZTo6b3BlbkN1cnNvciIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsKLSAgICAgICAgZWMuY29k
ZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewotICAg
ICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5zYWN0aW9uSW5hY3RpdmVF
cnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIEluZGV4ZWREQjo6Q3Vyc29yRGly
ZWN0aW9uIGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24oZGlyZWN0aW9u
U3RyaW5nLCBlYy5jb2RlKTsKLSAgICBpZiAoZWMuY29kZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBSZWZQdHI8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdCA9IExlZ2FjeVJlcXVlc3Q6OmNyZWF0
ZShjb250ZXh0LCBMZWdhY3lBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7
Ci0gICAgcmVxdWVzdC0+c2V0Q3Vyc29yRGV0YWlscyhJbmRleGVkREI6OkN1cnNvclR5cGU6Oktl
eUFuZFZhbHVlLCBkaXJlY3Rpb24pOwotCi0gICAgYmFja2VuZERCKCktPm9wZW5DdXJzb3IobV90
cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkLCByYW5n
ZSwgZGlyZWN0aW9uLCBmYWxzZSwgc3RhdGljX2Nhc3Q8SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNr
VHlwZT4odGFza1R5cGUpLCByZXF1ZXN0KTsKLSAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7
Ci19Ci0KLVJlZlB0cjxJREJSZXF1ZXN0PiBMZWdhY3lPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRW
YWx1ZSYga2V5LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJiBlYykKLXsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFu
Z2U6Om9ubHkoY29udGV4dCwga2V5LCBlYy5jb2RlKTsKLSAgICBpZiAoZWMuY29kZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2UuZ2V0
KCksIGRpcmVjdGlvbiwgZWMpOwotfQotCi1SZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0
U3RvcmU6OmNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIElEQktleVJhbmdl
KiByYW5nZSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBMT0coU3RvcmFn
ZUFQSSwgIkxlZ2FjeU9iamVjdFN0b3JlOjpjb3VudCIpOwotICAgIGlmIChtX2RlbGV0ZWQpIHsK
LSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJv
cjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNB
Y3RpdmUoKSkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRyYW5z
YWN0aW9uSW5hY3RpdmVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIFJlZlB0
cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0ID0gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQs
IExlZ2FjeUFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBiYWNr
ZW5kREIoKS0+Y291bnQobV90cmFuc2FjdGlvbi0+aWQoKSwgaWQoKSwgSURCSW5kZXhNZXRhZGF0
YTo6SW52YWxpZElkLCByYW5nZSwgcmVxdWVzdCk7Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFz
ZSgpOwotfQotCi1SZWZQdHI8SURCUmVxdWVzdD4gTGVnYWN5T2JqZWN0U3RvcmU6OmNvdW50KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZh
bHVlJiBrZXksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMpCi17Ci0gICAgUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJhbmdlOjpvbmx5KGNvbnRleHQsIGtleSwgZWMu
Y29kZSk7Ci0gICAgaWYgKGVjLmNvZGUpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBj
b3VudChjb250ZXh0LCBrZXlSYW5nZS5nZXQoKSwgZWMpOwotfQotCi12b2lkIExlZ2FjeU9iamVj
dFN0b3JlOjp0cmFuc2FjdGlvbkZpbmlzaGVkKCkKLXsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlv
bi0+aXNGaW5pc2hlZCgpKTsKLQotICAgIC8vIEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCi0gICAg
bV9pbmRleE1hcC5jbGVhcigpOwotfQotCi1pbnQ2NF90IExlZ2FjeU9iamVjdFN0b3JlOjpmaW5k
SW5kZXhJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiBpbmRl
eCA6IG1fbWV0YWRhdGEuaW5kZXhlcykgewotICAgICAgICBpZiAoaW5kZXgudmFsdWUubmFtZSA9
PSBuYW1lKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXgua2V5ICE9IElEQkluZGV4TWV0YWRh
dGE6OkludmFsaWRJZCk7Ci0gICAgICAgICAgICByZXR1cm4gaW5kZXgua2V5OwotICAgICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQ7Ci19Ci0KLUlE
QkRhdGFiYXNlQmFja2VuZCogTGVnYWN5T2JqZWN0U3RvcmU6OmJhY2tlbmREQigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmREQigpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPYmpl
Y3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2Fj
eU9iamVjdFN0b3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5N2RlNjQuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2Fj
eU9iamVjdFN0b3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgTGVnYWN5T2JqZWN0U3RvcmVfaAotI2RlZmluZSBMZWdhY3lPYmplY3RTdG9yZV9oCi0K
LSNpbmNsdWRlICJEaWN0aW9uYXJ5LmgiCi0jaW5jbHVkZSAiSURCQ3Vyc29yLmgiCi0jaW5jbHVk
ZSAiSURCRGF0YWJhc2VCYWNrZW5kLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5o
IgotI2luY2x1ZGUgIklEQkluZGV4LmgiCi0jaW5jbHVkZSAiSURCS2V5LmgiCi0jaW5jbHVkZSAi
SURCS2V5UmFuZ2UuaCIKLSNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiTGVnYWN5
SW5kZXguaCIKLSNpbmNsdWRlICJMZWdhY3lUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgIlNjcmlw
dFdyYXBwYWJsZS5oIgotI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgRE9NU3RyaW5nTGlzdDsKLWNsYXNzIElEQkFu
eTsKLWNsYXNzIExlZ2FjeUluZGV4OwotCi1jbGFzcyBMZWdhY3lPYmplY3RTdG9yZSA6IHB1Ymxp
YyBTY3JpcHRXcmFwcGFibGUsIHB1YmxpYyBJREJPYmplY3RTdG9yZSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxMZWdhY3lPYmplY3RTdG9yZT4gY3JlYXRlKGNvbnN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEmIG1ldGFkYXRhLCBMZWdhY3lUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBMZWdhY3lPYmplY3RTdG9yZShtZXRhZGF0
YSwgdHJhbnNhY3Rpb24pKTsKLSAgICB9Ci0gICAgfkxlZ2FjeU9iamVjdFN0b3JlKCkgeyB9Ci0K
LSAgICAvLyBJbXBsZW1lbnQgdGhlIElEQk9iamVjdFN0b3JlIElETAotICAgIGludDY0X3QgaWQo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLmlkOyB9Ci0gICAgY29uc3QgU3RyaW5nIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhLm5hbWU7IH0KLSAgICBSZWZQdHI8SURCQW55PiBr
ZXlQYXRoQW55KCkgY29uc3QgeyByZXR1cm4gTGVnYWN5QW55OjpjcmVhdGUobV9tZXRhZGF0YS5r
ZXlQYXRoKTsgfQotICAgIGNvbnN0IElEQktleVBhdGgga2V5UGF0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWV0YWRhdGEua2V5UGF0aDsgfQotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBpbmRleE5h
bWVzKCkgY29uc3Q7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbigpIHsg
cmV0dXJuIG1fdHJhbnNhY3Rpb247IH0KLSAgICBib29sIGF1dG9JbmNyZW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX21ldGFkYXRhLmF1dG9JbmNyZW1lbnQ7IH0KLQotICAgIFJlZlB0cjxJREJSZXF1
ZXN0PiBhZGQoSlNDOjpFeGVjU3RhdGUmLCBKU0M6OkpTVmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYpOwotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBwdXQoSlNDOjpFeGVjU3RhdGUmLCBK
U0M6OkpTVmFsdWUsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwotICAgIFJlZlB0cjxJREJS
ZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmKTsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgSURCS2V5UmFuZ2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
KTsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJik7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIElEQktleVJhbmdlKiwgY29uc3QgU3RyaW5nJiBkaXJlY3Rpb24sIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBJREJLZXlSYW5nZSosIGNvbnN0IFN0cmluZyYg
ZGlyZWN0aW9uLCBJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlLCBFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmKTsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgY29uc3Qg
U3RyaW5nJiBkaXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwotCi0gICAgUmVm
UHRyPElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmIGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7Ci0gICAg
UmVmUHRyPElEQlJlcXVlc3Q+IGdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgSURCS2V5UmFu
Z2UqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4g
YWRkKEpTQzo6RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUga2V5LCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcHV0KEpTQzo6
RXhlY1N0YXRlJiwgSlNDOjpKU1ZhbHVlLCBKU0M6OkpTVmFsdWUga2V5LCBFeGNlcHRpb25Db2Rl
V2l0aE1lc3NhZ2UmKTsKLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcHV0KElEQkRhdGFiYXNlQmFj
a2VuZDo6UHV0TW9kZSwgUmVmUHRyPExlZ2FjeUFueT4sIEpTQzo6RXhlY1N0YXRlJiwgRGVwcmVj
YXRlZDo6U2NyaXB0VmFsdWUmLCBSZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNz
YWdlJik7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChJREJEYXRhYmFzZUJhY2tlbmQ6OlB1
dE1vZGUsIFJlZlB0cjxMZWdhY3lBbnk+IHNvdXJjZSwgSlNDOjpFeGVjU3RhdGUmLCBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSYsIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiBrZXksIEV4
Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwotCi0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IGRlbGV0
ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBJREJLZXlSYW5nZSosIEV4Y2VwdGlv
bkNvZGVXaXRoTWVzc2FnZSYpOwotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVGdW5jdGlv
bihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUm
IGtleSwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJik7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+
IGNsZWFyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2Um
KTsKLQotICAgIFJlZlB0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgs
IGNvbnN0IERpY3Rpb25hcnkmIG9wdGlvbnMsIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYgZWMp
IHsgcmV0dXJuIGNyZWF0ZUluZGV4KGNvbnRleHQsIG5hbWUsIElEQktleVBhdGgoa2V5UGF0aCks
IG9wdGlvbnMsIGVjKTsgfQotICAgIFJlZlB0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYga2V5UGF0aCwgY29uc3QgRGljdGlvbmFyeSYgb3B0aW9ucywgRXhjZXB0aW9u
Q29kZVdpdGhNZXNzYWdlJiBlYykgeyByZXR1cm4gY3JlYXRlSW5kZXgoY29udGV4dCwgbmFtZSwg
SURCS2V5UGF0aChrZXlQYXRoKSwgb3B0aW9ucywgZWMpOyB9Ci0gICAgUmVmUHRyPElEQkluZGV4
PiBjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBJREJLZXlQYXRoJiwgY29uc3QgRGljdGlvbmFyeSYsIEV4Y2VwdGlvbkNvZGVXaXRo
TWVzc2FnZSYpOwotICAgIFJlZlB0cjxJREJJbmRleD4gY3JlYXRlSW5kZXgoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wg
dW5pcXVlLCBib29sIG11bHRpRW50cnksIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSYpOwotCi0g
ICAgUmVmUHRyPElEQkluZGV4PiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNv
ZGVXaXRoTWVzc2FnZSYpOwotICAgIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKTsKLQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBj
b3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmIGVjKSB7IHJldHVybiBjb3VudChjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5n
ZSo+KG51bGxwdHIpLCBlYyk7IH0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIElEQktleVJhbmdlKiwgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
Jik7Ci0gICAgUmVmUHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRWYWx1ZSYga2V5LCBFeGNlcHRpb25Db2RlV2l0aE1l
c3NhZ2UmKTsKLQotICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7IG1fZGVsZXRlZCA9IHRydWU7IH0K
LSAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKLQotICAgIElEQk9iamVjdFN0b3JlTWV0
YWRhdGEgbWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiBtX21ldGFkYXRhOyB9Ci0gICAgdm9pZCBz
ZXRNZXRhZGF0YShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiBtZXRhZGF0YSkgeyBtX21l
dGFkYXRhID0gbWV0YWRhdGE7IH0KLQotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxJREJLZXk+
PiBJbmRleEtleXM7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSW5kZXhLZXlzPiBJbmRl
eEtleU1hcDsKLQotICAgIElEQkRhdGFiYXNlQmFja2VuZCogYmFja2VuZERCKCkgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgTGVnYWN5T2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSYsIExlZ2FjeVRyYW5zYWN0aW9uKik7Ci0KLSAgICBpbnQ2NF90IGZpbmRJbmRleElkKGNv
bnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7Ci0gICAgYm9vbCBjb250YWluc0luZGV4KGNvbnN0IFN0
cmluZyYgbmFtZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBmaW5kSW5kZXhJZChuYW1l
KSAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQ7Ci0gICAgfQotCi0gICAgSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSBtX21ldGFkYXRhOwotICAgIFJlZlB0cjxMZWdhY3lUcmFuc2FjdGlvbj4g
bV90cmFuc2FjdGlvbjsKLSAgICBib29sIG1fZGVsZXRlZDsKLQotICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxMZWdhY3lJbmRleD4+IElEQkluZGV4TWFwOwotICAgIElEQkluZGV4
TWFwIG1faW5kZXhNYXA7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgot
Ci0jZW5kaWYgLy8gTGVnYWN5T2JqZWN0U3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeU9wZW5EQlJlcXVlc3Qu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjE3YmMzLi4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1
ZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkxlZ2FjeU9wZW5EQlJlcXVlc3QuaCIKLQotI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VDYWxsYmFja3NJbXBs
LmgiCi0jaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIgotI2luY2x1ZGUg
IklEQlZlcnNpb25DaGFuZ2VFdmVudC5oIgotI2luY2x1ZGUgIkxlZ2FjeURhdGFiYXNlLmgiCi0j
aW5jbHVkZSAiTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5o
IgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1SZWY8TGVnYWN5T3BlbkRCUmVxdWVzdD4gTGVnYWN5T3BlbkRCUmVxdWVzdDo6Y3Jl
YXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+IGNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRfdCB2
ZXJzaW9uLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzcyB2ZXJzaW9uTnVsbG5lc3MpCi17Ci0g
ICAgUmVmPExlZ2FjeU9wZW5EQlJlcXVlc3Q+IHJlcXVlc3QoYWRvcHRSZWYoKm5ldyBMZWdhY3lP
cGVuREJSZXF1ZXN0KGNvbnRleHQsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb25JZCwgdmVyc2lvbiwg
dmVyc2lvbk51bGxuZXNzKSkpOwotICAgIHJlcXVlc3QtPnN1c3BlbmRJZk5lZWRlZCgpOwotICAg
IHJldHVybiByZXF1ZXN0OwotfQotCi1MZWdhY3lPcGVuREJSZXF1ZXN0OjpMZWdhY3lPcGVuREJS
ZXF1ZXN0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcywgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRf
dCB2ZXJzaW9uLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzcyB2ZXJzaW9uTnVsbG5lc3MpCi0g
ICAgOiBMZWdhY3lSZXF1ZXN0KGNvbnRleHQsIExlZ2FjeUFueTo6Y3JlYXRlTnVsbCgpLCBJREJE
YXRhYmFzZUJhY2tlbmQ6Ok5vcm1hbFRhc2ssIDApCi0gICAgLCBtX2RhdGFiYXNlQ2FsbGJhY2tz
KGNhbGxiYWNrcykKLSAgICAsIG1fdHJhbnNhY3Rpb25JZCh0cmFuc2FjdGlvbklkKQotICAgICwg
bV92ZXJzaW9uKHZlcnNpb24pCi0gICAgLCBtX3ZlcnNpb25OdWxsbmVzcyh2ZXJzaW9uTnVsbG5l
c3MpCi17Ci0gICAgQVNTRVJUKCFtX3Jlc3VsdCk7Ci19Ci0KLUxlZ2FjeU9wZW5EQlJlcXVlc3Q6
On5MZWdhY3lPcGVuREJSZXF1ZXN0KCkKLXsKLX0KLQotRXZlbnRUYXJnZXRJbnRlcmZhY2UgTGVn
YWN5T3BlbkRCUmVxdWVzdDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdAotewotICAgIHJl
dHVybiBJREJPcGVuREJSZXF1ZXN0RXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOwotfQotCi12b2lk
IExlZ2FjeU9wZW5EQlJlcXVlc3Q6Om9uQmxvY2tlZCh1aW50NjRfdCBvbGRWZXJzaW9uKQotewot
ICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5T3BlbkRCUmVxdWVzdDo6b25CbG9ja2VkKCkiKTsK
LSAgICBpZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgZW5xdWV1ZUV2ZW50KExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudDo6Y3JlYXRlKG9sZFZlcnNp
b24sIG1fdmVyc2lvbiwgZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCkpOwotfQotCi12b2lkIExl
Z2FjeU9wZW5EQlJlcXVlc3Q6Om9uVXBncmFkZU5lZWRlZCh1aW50NjRfdCBvbGRWZXJzaW9uLCBQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4gcHJwRGF0YWJhc2VCYWNrZW5kLCBjb25zdCBJ
REJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkxl
Z2FjeU9wZW5EQlJlcXVlc3Q6Om9uVXBncmFkZU5lZWRlZCgpIik7Ci0gICAgaWYgKG1fY29udGV4
dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewotICAgICAgICBSZWZQdHI8
SURCRGF0YWJhc2VCYWNrZW5kPiBkYiA9IHBycERhdGFiYXNlQmFja2VuZDsKLSAgICAgICAgZGIt
PmFib3J0KG1fdHJhbnNhY3Rpb25JZCk7Ci0gICAgICAgIGRiLT5jbG9zZShtX2RhdGFiYXNlQ2Fs
bGJhY2tzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXNob3VsZEVucXVldWVF
dmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQobV9kYXRhYmFzZUNhbGxiYWNr
cyk7Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBkYXRhYmFzZUJhY2tlbmQgPSBw
cnBEYXRhYmFzZUJhY2tlbmQ7Ci0KLSAgICBSZWZQdHI8TGVnYWN5RGF0YWJhc2U+IGlkYkRhdGFi
YXNlID0gTGVnYWN5RGF0YWJhc2U6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIGRh
dGFiYXNlQmFja2VuZCwgbV9kYXRhYmFzZUNhbGxiYWNrcyk7Ci0gICAgaWRiRGF0YWJhc2UtPnNl
dE1ldGFkYXRhKG1ldGFkYXRhKTsKLSAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzLT5jb25uZWN0KGlk
YkRhdGFiYXNlLmdldCgpKTsKLSAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzID0gbnVsbHB0cjsKLQot
ICAgIElEQkRhdGFiYXNlTWV0YWRhdGEgb2xkTWV0YWRhdGEobWV0YWRhdGEpOwotICAgIG9sZE1l
dGFkYXRhLnZlcnNpb24gPSBvbGRWZXJzaW9uOwotCi0gICAgbV90cmFuc2FjdGlvbiA9IExlZ2Fj
eVRyYW5zYWN0aW9uOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBtX3RyYW5zYWN0
aW9uSWQsIGlkYkRhdGFiYXNlLmdldCgpLCB0aGlzLCBvbGRNZXRhZGF0YSk7Ci0gICAgbV9yZXN1
bHQgPSBMZWdhY3lBbnk6OmNyZWF0ZShpZGJEYXRhYmFzZS5yZWxlYXNlKCkpOwotCi0gICAgaWYg
KG1fdmVyc2lvbk51bGxuZXNzID09IEluZGV4ZWREQjo6VmVyc2lvbk51bGxuZXNzOjpOdWxsKQot
ICAgICAgICBtX3ZlcnNpb24gPSAxOwotICAgIGVucXVldWVFdmVudChMZWdhY3lWZXJzaW9uQ2hh
bmdlRXZlbnQ6OmNyZWF0ZShvbGRWZXJzaW9uLCBtX3ZlcnNpb24sIGV2ZW50TmFtZXMoKS51cGdy
YWRlbmVlZGVkRXZlbnQpKTsKLX0KLQotdm9pZCBMZWdhY3lPcGVuREJSZXF1ZXN0OjpvblN1Y2Nl
c3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IHBycEJhY2tlbmQsIGNvbnN0IElEQkRh
dGFiYXNlTWV0YWRhdGEmIG1ldGFkYXRhKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5
T3BlbkRCUmVxdWVzdDo6b25TdWNjZXNzKCkiKTsKLSAgICBpZiAoIXNob3VsZEVucXVldWVFdmVu
dCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kPiBi
YWNrZW5kID0gcHJwQmFja2VuZDsKLSAgICBSZWZQdHI8TGVnYWN5RGF0YWJhc2U+IGlkYkRhdGFi
YXNlOwotICAgIGlmIChtX3Jlc3VsdCkgewotICAgICAgICBpZGJEYXRhYmFzZSA9IG1fcmVzdWx0
LT5sZWdhY3lEYXRhYmFzZSgpOwotICAgICAgICBBU1NFUlQoaWRiRGF0YWJhc2UpOwotICAgICAg
ICBBU1NFUlQoIW1fZGF0YWJhc2VDYWxsYmFja3MpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFT
U0VSVChtX2RhdGFiYXNlQ2FsbGJhY2tzKTsKLSAgICAgICAgaWRiRGF0YWJhc2UgPSBMZWdhY3lE
YXRhYmFzZTo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgYmFja2VuZC5yZWxlYXNl
KCksIG1fZGF0YWJhc2VDYWxsYmFja3MpOwotICAgICAgICBtX2RhdGFiYXNlQ2FsbGJhY2tzLT5j
b25uZWN0KGlkYkRhdGFiYXNlLmdldCgpKTsKLSAgICAgICAgbV9kYXRhYmFzZUNhbGxiYWNrcyA9
IG51bGxwdHI7Ci0gICAgICAgIG1fcmVzdWx0ID0gTGVnYWN5QW55OjpjcmVhdGUoaWRiRGF0YWJh
c2UuZ2V0KCkpOwotICAgIH0KLSAgICBpZGJEYXRhYmFzZS0+c2V0TWV0YWRhdGEobWV0YWRhdGEp
OwotICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZl
bnQsIGZhbHNlLCBmYWxzZSkpOwotfQotCi1ib29sIExlZ2FjeU9wZW5EQlJlcXVlc3Q6OnNob3Vs
ZEVucXVldWVFdmVudCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIEFTU0VS
VChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRpbmcgfHwgbV9yZWFk
eVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lKTsKLSAgICBpZiAobV9yZXF1ZXN0
QWJvcnRlZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIExlZ2FjeU9wZW5EQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQotewot
ICAgIC8vIElmIHRoZSBjb25uZWN0aW9uIGNsb3NlZCBiZXR3ZWVuIG9uVXBncmFkZU5lZWRlZCBh
bmQgdGhlIGRlbGl2ZXJ5IG9mIHRoZSAic3VjY2VzcyIgZXZlbnQsCi0gICAgLy8gYW4gImVycm9y
IiBldmVudCBzaG91bGQgYmUgZmlyZWQgaW5zdGVhZC4KLSAgICBpZiAoZXZlbnQudHlwZSgpID09
IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgJiYgbV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6
OlR5cGU6OklEQkRhdGFiYXNlICYmIG1fcmVzdWx0LT5sZWdhY3lEYXRhYmFzZSgpLT5pc0Nsb3Nl
UGVuZGluZygpKSB7Ci0gICAgICAgIG1fcmVzdWx0ID0gbnVsbHB0cjsKLSAgICAgICAgb25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJy
b3IsICJUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkLiIpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHJldHVybiBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KGV2ZW50
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVuREJSZXF1ZXN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5T3BlbkRC
UmVxdWVzdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGY2NmM0Li4wMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lPcGVu
REJSZXF1ZXN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBMZWdhY3lPcGVuREJSZXF1ZXN0X2gKLSNkZWZpbmUgTGVnYWN5T3BlbkRCUmVxdWVzdF9oCi0K
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQkRhdGFiYXNlTWV0
YWRhdGEuaCIKLSNpbmNsdWRlICJJREJPcGVuREJSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiSW5kZXhl
ZERCLmgiCi0jaW5jbHVkZSAiTGVnYWN5UmVxdWVzdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIElEQkRhdGFiYXNlQ2FsbGJhY2tzOwotCi1jbGFzcyBMZWdhY3lPcGVuREJSZXF1
ZXN0IDogcHVibGljIExlZ2FjeVJlcXVlc3QgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TGVn
YWN5T3BlbkRCUmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCB1aW50NjRf
dCB2ZXJzaW9uLCBJbmRleGVkREI6OlZlcnNpb25OdWxsbmVzcyk7Ci0gICAgdmlydHVhbCB+TGVn
YWN5T3BlbkRCUmVxdWVzdCgpOwotCi0gICAgdmlydHVhbCB2b2lkIG9uQmxvY2tlZCh1aW50NjRf
dCBleGlzdGluZ1ZlcnNpb24pIG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgdm9pZCBvblVw
Z3JhZGVOZWVkZWQodWludDY0X3Qgb2xkVmVyc2lvbiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmQ+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJikgb3ZlcnJpZGUgZmluYWw7Ci0gICAg
dmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZD4sIGNv
bnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKSBvdmVycmlkZSBmaW5hbDsKLQotICAgIC8vIEV2ZW50
VGFyZ2V0Ci0gICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdldEludGVy
ZmFjZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2
ZW50KEV2ZW50Jikgb3ZlcnJpZGUgZmluYWw7Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIGJv
b2wgc2hvdWxkRW5xdWV1ZUV2ZW50KCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAg
TGVnYWN5T3BlbkRCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUNhbGxiYWNrcz4sIGludDY0X3QgdHJhbnNhY3Rpb25JZCwgdWludDY0X3QgdmVy
c2lvbiwgSW5kZXhlZERCOjpWZXJzaW9uTnVsbG5lc3MpOwotCi0gICAgUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiBtX2RhdGFiYXNlQ2FsbGJhY2tzOwotICAgIGNvbnN0IGludDY0X3QgbV90
cmFuc2FjdGlvbklkOwotICAgIHVpbnQ2NF90IG1fdmVyc2lvbjsKLSAgICBJbmRleGVkREI6OlZl
cnNpb25OdWxsbmVzcyBtX3ZlcnNpb25OdWxsbmVzczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jZW5kaWYgLy8g
TGVnYWN5T3BlbkRCUmVxdWVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGJmY2RkYzUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NTg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMZWdhY3lSZXF1ZXN0LmgiCi0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIK
LSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRXZlbnRRdWV1ZS5oIgotI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIklEQkJpbmRpbmdVdGls
aXRpZXMuaCIKLSNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kLmgiCi0jaW5jbHVkZSAiSURCQ3Vy
c29yV2l0aFZhbHVlLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2UuaCIKLSNpbmNsdWRlICJJREJF
dmVudERpc3BhdGNoZXIuaCIKLSNpbmNsdWRlICJJREJJbmRleC5oIgotI2luY2x1ZGUgIkxlZ2Fj
eUN1cnNvci5oIgotI2luY2x1ZGUgIkxlZ2FjeUN1cnNvcldpdGhWYWx1ZS5oIgotI2luY2x1ZGUg
IkxlZ2FjeVRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLSNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8
TGVnYWN5UmVxdWVzdD4gTGVnYWN5UmVxdWVzdDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TGVnYWN5QW55PiBzb3VyY2UsIExlZ2FjeVRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBSZWY8TGVnYWN5UmVxdWVzdD4gcmVxdWVzdChhZG9w
dFJlZigqbmV3IExlZ2FjeVJlcXVlc3QoY29udGV4dCwgc291cmNlLCBJREJEYXRhYmFzZUJhY2tl
bmQ6Ok5vcm1hbFRhc2ssIHRyYW5zYWN0aW9uKSkpOwotICAgIHJlcXVlc3QtPnN1c3BlbmRJZk5l
ZWRlZCgpOwotICAgIC8vIFJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCBJREJGYWN0b3J5IChvcGVu
L2RlbGV0ZURhdGFiYXNlL2dldERhdGFiYXNlTmFtZXMpIGFyZSBub3QgYXNzb2NpYXRlZCB3aXRo
IHRyYW5zYWN0aW9ucy4KLSAgICBpZiAodHJhbnNhY3Rpb24pCi0gICAgICAgIHRyYW5zYWN0aW9u
LT5yZWdpc3RlclJlcXVlc3QocmVxdWVzdC5wdHIoKSk7Ci0gICAgcmV0dXJuIHJlcXVlc3Q7Ci19
Ci0KLVJlZjxMZWdhY3lSZXF1ZXN0PiBMZWdhY3lSZXF1ZXN0OjpjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxMZWdhY3lBbnk+IHNvdXJjZSwgSURCRGF0
YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgTGVnYWN5VHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKQotewotICAgIFJlZjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0KGFkb3B0UmVmKCpuZXcg
TGVnYWN5UmVxdWVzdChjb250ZXh0LCBzb3VyY2UsIHRhc2tUeXBlLCB0cmFuc2FjdGlvbikpKTsK
LSAgICByZXF1ZXN0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICAvLyBSZXF1ZXN0cyBhc3NvY2lh
dGVkIHdpdGggSURCRmFjdG9yeSAob3Blbi9kZWxldGVEYXRhYmFzZS9nZXREYXRhYmFzZU5hbWVz
KSBhcmUgbm90IGFzc29jaWF0ZWQgd2l0aCB0cmFuc2FjdGlvbnMuCi0gICAgaWYgKHRyYW5zYWN0
aW9uKQotICAgICAgICB0cmFuc2FjdGlvbi0+cmVnaXN0ZXJSZXF1ZXN0KHJlcXVlc3QucHRyKCkp
OwotICAgIHJldHVybiByZXF1ZXN0OwotfQotCi1MZWdhY3lSZXF1ZXN0OjpMZWdhY3lSZXF1ZXN0
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8TGVnYWN5QW55PiBz
b3VyY2UsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIExlZ2FjeVRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbikKLSAgICA6IElEQk9wZW5EQlJlcXVlc3QoY29udGV4dCkKLSAg
ICAsIG1fcmVzdWx0KG51bGxwdHIpCi0gICAgLCBtX2Vycm9yQ29kZSgwKQotICAgICwgbV9jb250
ZXh0U3RvcHBlZChmYWxzZSkKLSAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCi0gICAg
LCBtX3JlYWR5U3RhdGUoSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRpbmcpCi0gICAgLCBtX3Jl
cXVlc3RBYm9ydGVkKGZhbHNlKQotICAgICwgbV9zb3VyY2Uoc291cmNlKQotICAgICwgbV90YXNr
VHlwZSh0YXNrVHlwZSkKLSAgICAsIG1faGFzUGVuZGluZ0FjdGl2aXR5KHRydWUpCi0gICAgLCBt
X2N1cnNvclR5cGUoSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlBbmRWYWx1ZSkKLSAgICAsIG1f
Y3Vyc29yRGlyZWN0aW9uKEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uOjpOZXh0KQotICAgICwg
bV9jdXJzb3JGaW5pc2hlZChmYWxzZSkKLSAgICAsIG1fcGVuZGluZ0N1cnNvcihudWxscHRyKQot
ICAgICwgbV9kaWRGaXJlVXBncmFkZU5lZWRlZEV2ZW50KGZhbHNlKQotICAgICwgbV9wcmV2ZW50
UHJvcGFnYXRpb24oZmFsc2UpCi0gICAgLCBtX3JlcXVlc3RTdGF0ZShjb250ZXh0KQotewotfQot
Ci1MZWdhY3lSZXF1ZXN0Ojp+TGVnYWN5UmVxdWVzdCgpCi17Ci19Ci0KLVJlZlB0cjxJREJBbnk+
IExlZ2FjeVJlcXVlc3Q6OnJlc3VsdChFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKSBjb25z
dAotewotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUp
IHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkU3RhdGVF
cnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBtX3Jlc3VsdDsKLX0K
LQotUmVmUHRyPERPTUVycm9yPiBMZWdhY3lSZXF1ZXN0OjplcnJvcihFeGNlcHRpb25Db2RlV2l0
aE1lc3NhZ2UmIGVjKSBjb25zdAotewotICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gSURCUmVxdWVz
dFJlYWR5U3RhdGU6OkRvbmUpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJl
dHVybiBtX2Vycm9yOwotfQotCi11bnNpZ25lZCBzaG9ydCBMZWdhY3lSZXF1ZXN0OjplcnJvckNv
ZGUoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0Ci17Ci0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBJ
REJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJbnZhbGlkU3RhdGVFcnJvcjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAg
IHJldHVybiBtX2Vycm9yQ29kZTsKLX0KLQotUmVmUHRyPElEQkFueT4gTGVnYWN5UmVxdWVzdDo6
c291cmNlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zb3VyY2U7Ci19Ci0KLVJlZlB0cjxJREJU
cmFuc2FjdGlvbj4gTGVnYWN5UmVxdWVzdDo6dHJhbnNhY3Rpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBtX3RyYW5zYWN0aW9uOwotfQotCi1jb25zdCBTdHJpbmcmIExlZ2FjeVJlcXVlc3Q6OnJl
YWR5U3RhdGUoKSBjb25zdAotewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVz
dFJlYWR5U3RhdGU6OlBlbmRpbmcgfHwgbV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0
YXRlOjpEb25lKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8QXRvbWljU3RyaW5nPiBwZW5k
aW5nKCJwZW5kaW5nIiwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPEF0b21pY1N0cmluZz4gZG9uZSgiZG9uZSIsIEF0b21pY1N0
cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotCi0gICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBJ
REJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVuZGluZykKLSAgICAgICAgcmV0dXJuIHBlbmRpbmcuZ2V0
KCk7Ci0KLSAgICByZXR1cm4gZG9uZS5nZXQoKTsKLX0KLQotdm9pZCBMZWdhY3lSZXF1ZXN0Ojpt
YXJrRWFybHlEZWF0aCgpCi17Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0
UmVhZHlTdGF0ZTo6UGVuZGluZyk7Ci0gICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5
U3RhdGU6OkRlcHJlY2F0ZWRFYXJseURlYXRoOwotICAgIGlmIChtX3RyYW5zYWN0aW9uKQotICAg
ICAgICBtX3RyYW5zYWN0aW9uLT51bnJlZ2lzdGVyUmVxdWVzdCh0aGlzKTsKLX0KLQotdm9pZCBM
ZWdhY3lSZXF1ZXN0OjphYm9ydCgpCi17Ci0gICAgQVNTRVJUKCFtX3JlcXVlc3RBYm9ydGVkKTsK
LSAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1ZXN0UmVh
ZHlTdGF0ZTo6UGVuZGluZyB8fCBtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6
OkRvbmUpOwotICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRv
bmUpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEVucXVldWVkIGV2ZW50cyBtYXkgYmUgdGhl
IG9ubHkgcmVmZXJlbmNlIHRvIHRoaXMgb2JqZWN0LgotICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0
PiBzZWxmKHRoaXMpOwotCi0gICAgRXZlbnRRdWV1ZSYgZXZlbnRRdWV1ZSA9IHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwotICAgIGZvciAoYXV0byYgZXZlbnQgOiBtX2Vu
cXVldWVkRXZlbnRzKSB7Ci0gICAgICAgIGJvb2wgcmVtb3ZlZCA9IGV2ZW50UXVldWUuY2FuY2Vs
RXZlbnQoZXZlbnQpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwot
ICAgIH0KLSAgICBtX2VucXVldWVkRXZlbnRzLmNsZWFyKCk7Ci0KLSAgICBtX2Vycm9yQ29kZSA9
IDA7Ci0gICAgbV9lcnJvciA9IG51bGxwdHI7Ci0gICAgbV9lcnJvck1lc3NhZ2UgPSBTdHJpbmco
KTsKLSAgICBtX3Jlc3VsdCA9IG51bGxwdHI7Ci0gICAgb25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkFib3J0RXJyb3IpKTsKLSAgICBtX3JlcXVl
c3RBYm9ydGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBMZWdhY3lSZXF1ZXN0OjpzZXRDdXJzb3JEZXRh
aWxzKEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBjdXJzb3JUeXBlLCBJbmRleGVkREI6OkN1cnNvckRp
cmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBJREJSZXF1
ZXN0UmVhZHlTdGF0ZTo6UGVuZGluZyk7Ci0gICAgQVNTRVJUKCFtX3BlbmRpbmdDdXJzb3IpOwot
ICAgIG1fY3Vyc29yVHlwZSA9IGN1cnNvclR5cGU7Ci0gICAgbV9jdXJzb3JEaXJlY3Rpb24gPSBk
aXJlY3Rpb247Ci19Ci0KLXZvaWQgTGVnYWN5UmVxdWVzdDo6c2V0UGVuZGluZ0N1cnNvcihQYXNz
UmVmUHRyPExlZ2FjeUN1cnNvcj4gY3Vyc29yKQotewotICAgIEFTU0VSVChtX3JlYWR5U3RhdGUg
PT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OkRvbmUpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOwotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsKLSAgICBBU1NFUlQoIW1f
cGVuZGluZ0N1cnNvcik7Ci0gICAgQVNTRVJUKGN1cnNvciA9PSBnZXRSZXN1bHRDdXJzb3IoKSk7
Ci0KLSAgICBtX3BlbmRpbmdDdXJzb3IgPSBjdXJzb3I7Ci0gICAgbV9yZXN1bHQgPSBudWxscHRy
OwotICAgIG1fcmVhZHlTdGF0ZSA9IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nOwotICAg
IG1fZXJyb3JDb2RlID0gMDsKLSAgICBtX2Vycm9yID0gbnVsbHB0cjsKLSAgICBtX2Vycm9yTWVz
c2FnZSA9IFN0cmluZygpOwotICAgIG1fdHJhbnNhY3Rpb24tPnJlZ2lzdGVyUmVxdWVzdCh0aGlz
KTsKLX0KLQotUmVmUHRyPExlZ2FjeUN1cnNvcj4gTGVnYWN5UmVxdWVzdDo6Z2V0UmVzdWx0Q3Vy
c29yKCkKLXsKLSAgICBpZiAoIW1fcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBpZiAobV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcikKLSAgICAg
ICAgcmV0dXJuIG1fcmVzdWx0LT5sZWdhY3lDdXJzb3IoKTsKLSAgICBpZiAobV9yZXN1bHQtPnR5
cGUoKSA9PSBJREJBbnk6OlR5cGU6OklEQkN1cnNvcldpdGhWYWx1ZSkKLSAgICAgICAgcmV0dXJu
IG1fcmVzdWx0LT5sZWdhY3lDdXJzb3JXaXRoVmFsdWUoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotdm9pZCBMZWdhY3lSZXF1ZXN0OjpzZXRSZXN1bHRDdXJzb3IoUGFzc1JlZlB0cjxMZWdh
Y3lDdXJzb3I+IGN1cnNvciwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJL
ZXk+IHByaW1hcnlLZXksIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSkKLXsK
LSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5n
KTsKLSAgICBtX2N1cnNvcktleSA9IGtleTsKLSAgICBtX2N1cnNvclByaW1hcnlLZXkgPSBwcmlt
YXJ5S2V5OwotICAgIG1fY3Vyc29yVmFsdWUgPSB2YWx1ZTsKLQotICAgIGlmIChtX2N1cnNvclR5
cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlPbmx5KSB7Ci0gICAgICAgIG1fcmVzdWx0
ID0gTGVnYWN5QW55OjpjcmVhdGUoY3Vyc29yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fcmVzdWx0ID0gTGVnYWN5QW55OjpjcmVhdGUoTGVnYWN5Q3Vyc29yV2l0aFZhbHVlOjpm
cm9tQ3Vyc29yKGN1cnNvcikpOwotfQotCi12b2lkIExlZ2FjeVJlcXVlc3Q6OmZpbmlzaEN1cnNv
cigpCi17Ci0gICAgbV9jdXJzb3JGaW5pc2hlZCA9IHRydWU7Ci0gICAgaWYgKG1fcmVhZHlTdGF0
ZSAhPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVuZGluZykKLSAgICAgICAgbV9oYXNQZW5kaW5n
QWN0aXZpdHkgPSBmYWxzZTsKLX0KLQotYm9vbCBMZWdhY3lSZXF1ZXN0OjpzaG91bGRFbnF1ZXVl
RXZlbnQoKSBjb25zdAotewotICAgIGlmIChtX2NvbnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQobV9yZWFk
eVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nIHx8IG1fcmVhZHlTdGF0ZSA9
PSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSk7Ci0gICAgaWYgKG1fcmVxdWVzdEFib3J0ZWQp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IElEQlJl
cXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nKTsKLSAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1f
ZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX2Vycm9yICYmICFtX3Jlc3VsdCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgTGVnYWN5UmVxdWVzdDo6b25FcnJvcihQYXNzUmVmUHRyPElE
QkRhdGFiYXNlRXJyb3I+IGVycm9yKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5UmVx
dWVzdDo6b25FcnJvcigpICglcykgJyVzJyIsIGVycm9yLT5uYW1lKCkudXRmOCgpLmRhdGEoKSwg
ZXJyb3ItPm1lc3NhZ2UoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAoIXNob3VsZEVucXVldWVF
dmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Vycm9yQ29kZSA9IGVycm9yLT5jb2Rl
KCk7Ci0gICAgbV9lcnJvck1lc3NhZ2UgPSBlcnJvci0+bWVzc2FnZSgpOwotICAgIG1fZXJyb3Ig
PSBET01FcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpnZXRFcnJvck5hbWUoZXJy
b3ItPmlkYkNvZGUoKSkpOwotICAgIG1fcGVuZGluZ0N1cnNvciA9IG51bGxwdHI7Ci0gICAgZW5x
dWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmVycm9yRXZlbnQsIHRydWUsIHRy
dWUpKTsKLX0KLQotc3RhdGljIFJlZjxFdmVudD4gY3JlYXRlU3VjY2Vzc0V2ZW50KCkKLXsKLSAg
ICByZXR1cm4gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBmYWxzZSwg
ZmFsc2UpOwotfQotCi12b2lkIExlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPERP
TVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3QpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdh
Y3lSZXF1ZXN0OjpvblN1Y2Nlc3MoRE9NU3RyaW5nTGlzdCkiKTsKLSAgICBpZiAoIXNob3VsZEVu
cXVldWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3Jlc3VsdCA9IExlZ2FjeUFu
eTo6Y3JlYXRlKGRvbVN0cmluZ0xpc3QpOwotICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNz
RXZlbnQoKSk7Ci19Ci0KLXZvaWQgTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8
SURCQ3Vyc29yQmFja2VuZD4gcHJwQmFja2VuZCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkxl
Z2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhJREJDdXJzb3IpIik7Ci0gICAgaWYgKCFzaG91bGRFbnF1
ZXVlRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRE9NUmVxdWVzdFN0YXRlOjpTY29w
ZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7Ci0KLSAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZD4g
YmFja2VuZCA9IHBycEJhY2tlbmQ7Ci0gICAgUmVmUHRyPElEQktleT4ga2V5ID0gYmFja2VuZC0+
a2V5KCk7Ci0gICAgUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSA9IGJhY2tlbmQtPnByaW1hcnlL
ZXkoKTsKLQotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemVJ
REJWYWx1ZUJ1ZmZlcihyZXF1ZXN0U3RhdGUoKSwgYmFja2VuZC0+dmFsdWVCdWZmZXIoKSwgISFr
ZXkpOwotCi0gICAgQVNTRVJUKCFtX3BlbmRpbmdDdXJzb3IpOwotICAgIFJlZlB0cjxMZWdhY3lD
dXJzb3I+IGN1cnNvcjsKLSAgICBzd2l0Y2ggKG1fY3Vyc29yVHlwZSkgewotICAgIGNhc2UgSW5k
ZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlPbmx5OgotICAgICAgICBjdXJzb3IgPSBMZWdhY3lDdXJz
b3I6OmNyZWF0ZShiYWNrZW5kLmdldCgpLCBtX2N1cnNvckRpcmVjdGlvbiwgdGhpcywgbV9zb3Vy
Y2UuZ2V0KCksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5QW5kVmFsdWU6Ci0gICAgICAgIGN1cnNvciA9IExl
Z2FjeUN1cnNvcldpdGhWYWx1ZTo6Y3JlYXRlKGJhY2tlbmQucmVsZWFzZSgpLCBtX2N1cnNvckRp
cmVjdGlvbiwgdGhpcywgbV9zb3VyY2UuZ2V0KCksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICB9Ci0gICAgc2V0UmVzdWx0Q3Vyc29yKGN1cnNvciwga2V5LnJlbGVhc2UoKSwgcHJpbWFy
eUtleS5yZWxlYXNlKCksIHZhbHVlKTsKLQotICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNz
RXZlbnQoKSk7Ci19Ci0KLXZvaWQgTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8
SURCS2V5PiBpZGJLZXkpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lSZXF1ZXN0Ojpv
blN1Y2Nlc3MoSURCS2V5KSIpOwotICAgIGlmICghc2hvdWxkRW5xdWV1ZUV2ZW50KCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChpZGJLZXkgJiYgaWRiS2V5LT5pc1ZhbGlkKCkpIHsKLSAg
ICAgICAgRE9NUmVxdWVzdFN0YXRlOjpTY29wZSBzY29wZShtX3JlcXVlc3RTdGF0ZSk7Ci0gICAg
ICAgIG1fcmVzdWx0ID0gTGVnYWN5QW55OjpjcmVhdGUoaWRiS2V5VG9TY3JpcHRWYWx1ZShyZXF1
ZXN0U3RhdGUoKSwgaWRiS2V5KSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fcmVzdWx0ID0gTGVn
YWN5QW55OjpjcmVhdGVJbnZhbGlkKCk7Ci0gICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NF
dmVudCgpKTsKLX0KLQotdm9pZCBMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxT
aGFyZWRCdWZmZXI+IHZhbHVlQnVmZmVyKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5
UmVxdWVzdDo6b25TdWNjZXNzKFNoYXJlZEJ1ZmZlcikiKTsKLSAgICBpZiAoIXNob3VsZEVucXVl
dWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3Bl
IHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsKLQotICAgIC8vIEZJWE1FOiBCeSBub3Qga25vd2luZyB3
aGV0aGVyIG9yIG5vdCB0aGUga2V5IGlzIGRlZmluZWQgaGVyZSwgd2UgZG9uJ3Qga25vdwotICAg
IC8vIGlmIGEgbnVsbCB2YWx1ZUJ1ZmZlciBtZWFucyB0aGUgdmFsdWUgaXMgbnVsbCBvciB0aGUg
dmFsdWUgaXMgdW5kZWZpbmVkLgotICAgIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIHZhbHVlID0g
ZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcihyZXF1ZXN0U3RhdGUoKSwgdmFsdWVCdWZmZXIsIHRy
dWUpOwotICAgIG9uU3VjY2Vzc0ludGVybmFsKHZhbHVlKTsKLX0KLQotI2lmbmRlZiBOREVCVUcK
LXN0YXRpYyBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBlZmZlY3RpdmVPYmplY3RTdG9yZShM
ZWdhY3lBbnkqIHNvdXJjZSkKLXsKLSAgICBpZiAoc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpU
eXBlOjpJREJPYmplY3RTdG9yZSkKLSAgICAgICAgcmV0dXJuIHNvdXJjZS0+aWRiT2JqZWN0U3Rv
cmUoKTsKLSAgICBpZiAoc291cmNlLT50eXBlKCkgPT0gSURCQW55OjpUeXBlOjpJREJJbmRleCkK
LSAgICAgICAgcmV0dXJuIHNvdXJjZS0+aWRiSW5kZXgoKS0+b2JqZWN0U3RvcmUoKTsKLQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLXZvaWQg
TGVnYWN5UmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZUJ1
ZmZlciwgUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IElEQktleVBhdGgm
IGtleVBhdGgpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nl
c3MoU2hhcmVkQnVmZmVyLCBJREJLZXksIElEQktleVBhdGgpIik7Ci0gICAgaWYgKCFzaG91bGRF
bnF1ZXVlRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWZuZGVmIE5ERUJVRwotICAgIEFT
U0VSVChrZXlQYXRoID09IGVmZmVjdGl2ZU9iamVjdFN0b3JlKG1fc291cmNlLmdldCgpKS0+a2V5
UGF0aCgpKTsKLSNlbmRpZgotICAgIERPTVJlcXVlc3RTdGF0ZTo6U2NvcGUgc2NvcGUobV9yZXF1
ZXN0U3RhdGUpOwotCi0gICAgLy8gRklYTUU6IEJ5IG5vdCBrbm93aW5nIHdoZXRoZXIgb3Igbm90
IHRoZSBrZXkgaXMgZGVmaW5lZCBoZXJlLCB3ZSBkb24ndCBrbm93Ci0gICAgLy8gaWYgYSBudWxs
IHZhbHVlQnVmZmVyIG1lYW5zIHRoZSB2YWx1ZSBpcyBudWxsIG9yIHRoZSB2YWx1ZSBpcyB1bmRl
ZmluZWQuCi0gICAgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFsdWUgPSBkZXNlcmlhbGl6ZUlE
QlZhbHVlQnVmZmVyKHJlcXVlc3RTdGF0ZSgpLCB2YWx1ZUJ1ZmZlciwgdHJ1ZSk7Ci0KLSAgICBS
ZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5ID0gcHJwUHJpbWFyeUtleTsKLQotICAgIGlmICgha2V5
UGF0aC5pc051bGwoKSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgUmVmUHRyPElEQktleT4g
ZXhwZWN0ZWRLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2NyaXB0VmFsdWVBbmRLZXlQYXRoKHJlcXVl
c3RTdGF0ZSgpLT5leGVjKCksIHZhbHVlLCBrZXlQYXRoKTsKLSAgICAgICAgQVNTRVJUKCFleHBl
Y3RlZEtleSB8fCBleHBlY3RlZEtleS0+aXNFcXVhbChwcmltYXJ5S2V5LmdldCgpKSk7Ci0jZW5k
aWYKLSAgICAgICAgYm9vbCBpbmplY3RlZCA9IGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShy
ZXF1ZXN0U3RhdGUoKSwgcHJpbWFyeUtleSwgdmFsdWUsIGtleVBhdGgpOwotICAgICAgICBBU1NF
UlRfVU5VU0VEKGluamVjdGVkLCBpbmplY3RlZCk7Ci0gICAgfQotCi0gICAgb25TdWNjZXNzSW50
ZXJuYWwodmFsdWUpOwotfQotCi12b2lkIExlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcyhpbnQ2NF90
IHZhbHVlKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNz
KGludDY0X3QpIik7Ci0gICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIHJldHVybiBvblN1Y2Nlc3NJbnRlcm5hbChTZXJpYWxpemVkU2NyaXB0VmFsdWU6
Om51bWJlclZhbHVlKHZhbHVlKSk7Ci19Ci0KLXZvaWQgTGVnYWN5UmVxdWVzdDo6b25TdWNjZXNz
KCkKLXsKLSAgICBMT0coU3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6Om9uU3VjY2VzcygpIik7
Ci0gICAgaWYgKCFzaG91bGRFbnF1ZXVlRXZlbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHJl
dHVybiBvblN1Y2Nlc3NJbnRlcm5hbChTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZh
bHVlKCkpOwotfQotCi12b2lkIExlZ2FjeVJlcXVlc3Q6Om9uU3VjY2Vzc0ludGVybmFsKFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSkKLXsKLSAgICBBU1NFUlQoIW1fY29u
dGV4dFN0b3BwZWQpOwotICAgIERPTVJlcXVlc3RTdGF0ZTo6U2NvcGUgc2NvcGUobV9yZXF1ZXN0
U3RhdGUpOwotICAgIHJldHVybiBvblN1Y2Nlc3NJbnRlcm5hbChkZXNlcmlhbGl6ZUlEQlZhbHVl
KHJlcXVlc3RTdGF0ZSgpLCB2YWx1ZSkpOwotfQotCi12b2lkIExlZ2FjeVJlcXVlc3Q6Om9uU3Vj
Y2Vzc0ludGVybmFsKGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiB2YWx1ZSkKLXsKLSAg
ICBtX3Jlc3VsdCA9IExlZ2FjeUFueTo6Y3JlYXRlKHZhbHVlKTsKLSAgICBpZiAobV9wZW5kaW5n
Q3Vyc29yKSB7Ci0gICAgICAgIG1fcGVuZGluZ0N1cnNvci0+Y2xvc2UoKTsKLSAgICAgICAgbV9w
ZW5kaW5nQ3Vyc29yID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1
Y2Nlc3NFdmVudCgpKTsKLX0KLQotdm9pZCBMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXksIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBidWZmZXIpCi17Ci0gICAgTE9HKFN0b3JhZ2VBUEksICJMZWdhY3lS
ZXF1ZXN0OjpvblN1Y2Nlc3Moa2V5LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlcikiKTsKLSAgICBp
ZiAoIXNob3VsZEVucXVldWVFdmVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBET01SZXF1
ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1fcmVxdWVzdFN0YXRlKTsKLQotICAgIERlcHJlY2F0ZWQ6
OlNjcmlwdFZhbHVlIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZUJ1ZmZlcihyZXF1ZXN0U3Rh
dGUoKSwgYnVmZmVyLCAhIWtleSk7Ci0KLSAgICBBU1NFUlQobV9wZW5kaW5nQ3Vyc29yKTsKLSAg
ICBzZXRSZXN1bHRDdXJzb3IobV9wZW5kaW5nQ3Vyc29yLnJlbGVhc2UoKSwga2V5LCBwcmltYXJ5
S2V5LCB2YWx1ZSk7Ci0gICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKLX0K
LQotdm9pZCBMZWdhY3lSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUJh
Y2tlbmQ+LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJikKLXsKLSAgICAvLyBPbmx5IHRoZSBM
ZWdhY3lPcGVuREJSZXF1ZXN0IHZlcnNpb24gb2YgdGhpcyBzaG91bGQgZXZlciBiZSBjYWxsZWQ7
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLWJvb2wgTGVnYWN5UmVxdWVzdDo6aGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW4gYW4gaWRlYWwgd29y
bGQsIHdlIHNob3VsZCByZXR1cm4gdHJ1ZSBhcyBsb25nIGFzIGFueW9uZSBoYXMgYSBvciBjYW4K
LSAgICAvLyAgICAgICAgZ2V0IGEgaGFuZGxlIHRvIHVzIGFuZCB3ZSBoYXZlIGV2ZW50IGxpc3Rl
bmVycy4gVGhpcyBpcyBvcmRlciB0byBoYW5kbGUKLSAgICAvLyAgICAgICAgdXNlciBnZW5lcmF0
ZWQgZXZlbnRzIHByb3Blcmx5LgotICAgIHJldHVybiBtX2hhc1BlbmRpbmdBY3Rpdml0eSAmJiAh
bV9jb250ZXh0U3RvcHBlZDsKLX0KLQotdm9pZCBMZWdhY3lSZXF1ZXN0OjpzdG9wKCkKLXsKLSAg
ICBpZiAobV9jb250ZXh0U3RvcHBlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0
U3RvcHBlZCA9IHRydWU7Ci0gICAgbV9yZXF1ZXN0U3RhdGUuY2xlYXIoKTsKLSAgICBpZiAobV9y
ZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nKQotICAgICAgICBtYXJr
RWFybHlEZWF0aCgpOwotfQotCi1ib29sIExlZ2FjeVJlcXVlc3Q6OmNhblN1c3BlbmRGb3JEb2N1
bWVudFN1c3BlbnNpb24oKSBjb25zdAotewotICAgIHJldHVybiAhbV9oYXNQZW5kaW5nQWN0aXZp
dHk7Ci19Ci0KLWNvbnN0IGNoYXIqIExlZ2FjeVJlcXVlc3Q6OmFjdGl2ZURPTU9iamVjdE5hbWUo
KSBjb25zdAotewotICAgIHJldHVybiAiTGVnYWN5UmVxdWVzdCI7Ci19Ci0KLUV2ZW50VGFyZ2V0
SW50ZXJmYWNlIExlZ2FjeVJlcXVlc3Q6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gSURCUmVxdWVzdEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlwZTsKLX0KLQotYm9v
bCBMZWdhY3lSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKLXsKLSAgICBMT0co
U3RvcmFnZUFQSSwgIkxlZ2FjeVJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQiKTsKLSAgICBBU1NFUlQo
bV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpQZW5kaW5nKTsKLSAgICBBU1NF
UlQoIW1fY29udGV4dFN0b3BwZWQpOwotICAgIEFTU0VSVChtX2hhc1BlbmRpbmdBY3Rpdml0eSk7
Ci0gICAgQVNTRVJUKG1fZW5xdWV1ZWRFdmVudHMuc2l6ZSgpKTsKLSAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBBU1NFUlQoZXZlbnQudGFyZ2V0KCkgPT0gdGhpcyk7
Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3JlYWR5U3RhdGUgPCBJREJSZXF1ZXN0UmVhZHlT
dGF0ZTo6RG9uZSwgIldoZW4gZGlzcGF0Y2hpbmcgZXZlbnQgJXMsIG1fcmVhZHlTdGF0ZSA8IERP
TkUoJWQpLCB3YXMgJWQiLCBldmVudC50eXBlKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8aW50PihJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6RG9uZSksIHN0YXRpY19jYXN0PGlu
dD4obV9yZWFkeVN0YXRlKSk7Ci0KLSAgICBET01SZXF1ZXN0U3RhdGU6OlNjb3BlIHNjb3BlKG1f
cmVxdWVzdFN0YXRlKTsKLQotICAgIGlmIChldmVudC50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJs
b2NrZWRFdmVudCkKLSAgICAgICAgbV9yZWFkeVN0YXRlID0gSURCUmVxdWVzdFJlYWR5U3RhdGU6
OkRvbmU7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZW5xdWV1ZWRFdmVudHMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZW5xdWV1ZWRFdmVudHNbaV0ucHRyKCkgPT0gJmV2
ZW50KQotICAgICAgICAgICAgbV9lbnF1ZXVlZEV2ZW50cy5yZW1vdmUoaSk7Ci0gICAgfQotCi0g
ICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IHRhcmdldHM7Ci0gICAgdGFyZ2V0cy5hcHBl
bmQodGhpcyk7Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24gJiYgIW1fcHJldmVudFByb3BhZ2F0aW9u
KSB7Ci0gICAgICAgIHRhcmdldHMuYXBwZW5kKG1fdHJhbnNhY3Rpb24pOwotICAgICAgICAvLyBJ
ZiB0aGVyZSBldmVyIGFyZSBldmVudHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIGEgZGF0YWJh
c2UgYnV0Ci0gICAgICAgIC8vIHRoYXQgZG8gbm90IGhhdmUgYSB0cmFuc2FjdGlvbiwgdGhlbiB0
aGlzIHdpbGwgbm90IHdvcmsgYW5kIHdlIG5lZWQKLSAgICAgICAgLy8gdGhpcyBvYmplY3QgdG8g
YWN0dWFsbHkgaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUgZGF0YWJhc2UgKHRvIGVuc3VyZQotICAg
ICAgICAvLyBpdCBzdGF5cyBhbGl2ZSkuCi0gICAgICAgIHRhcmdldHMuYXBwZW5kKG1fdHJhbnNh
Y3Rpb24tPmRiKCkpOwotICAgIH0KLQotICAgIC8vIEN1cnNvciBwcm9wZXJ0aWVzIHNob3VsZCBu
b3QgdXBkYXRlZCB1bnRpbCB0aGUgc3VjY2VzcyBldmVudCBpcyBiZWluZyBkaXNwYXRjaGVkLgot
ICAgIFJlZlB0cjxMZWdhY3lDdXJzb3I+IGN1cnNvclRvTm90aWZ5OwotICAgIGlmIChldmVudC50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCkgewotICAgICAgICBjdXJzb3JUb05v
dGlmeSA9IGdldFJlc3VsdEN1cnNvcigpOwotICAgICAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpIHsK
LSAgICAgICAgICAgIGN1cnNvclRvTm90aWZ5LT5zZXRWYWx1ZVJlYWR5KHJlcXVlc3RTdGF0ZSgp
LCBtX2N1cnNvcktleS5yZWxlYXNlKCksIG1fY3Vyc29yUHJpbWFyeUtleS5yZWxlYXNlKCksIG1f
Y3Vyc29yVmFsdWUpOwotICAgICAgICAgICAgbV9jdXJzb3JWYWx1ZS5jbGVhcigpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkudXBncmFk
ZW5lZWRlZEV2ZW50KSB7Ci0gICAgICAgIEFTU0VSVCghbV9kaWRGaXJlVXBncmFkZU5lZWRlZEV2
ZW50KTsKLSAgICAgICAgbV9kaWRGaXJlVXBncmFkZU5lZWRlZEV2ZW50ID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICAvLyBGSVhNRTogV2hlbiB3ZSBhbGxvdyBjdXN0b20gZXZlbnQgZGlzcGF0Y2hpbmcs
IHRoaXMgd2lsbCBwcm9iYWJseSBuZWVkIHRvIGNoYW5nZS4KLSAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50IHx8IGV2ZW50LnR5
cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCB8fCBldmVudC50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmJsb2NrZWRFdmVudCB8fCBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3Jh
ZGVuZWVkZWRFdmVudCwgImV2ZW50IHR5cGUgd2FzICVzIiwgZXZlbnQudHlwZSgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIGNvbnN0IGJvb2wgc2V0VHJhbnNhY3Rpb25BY3RpdmUgPSBt
X3RyYW5zYWN0aW9uICYmIChldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVu
dCB8fCBldmVudC50eXBlKCkgPT0gZXZlbnROYW1lcygpLnVwZ3JhZGVuZWVkZWRFdmVudCB8fCAo
ZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50ICYmIG1fZXJyb3JDb2RlICE9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpBYm9ydEVycm9yKSk7Ci0KLSAgICBpZiAoc2V0VHJhbnNh
Y3Rpb25BY3RpdmUpCi0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEFjdGl2ZSh0cnVlKTsKLQot
ICAgIGJvb2wgZG9udFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aChldmVudCwgdGFyZ2V0cyk7Ci0KLSAgICBpZiAobV90cmFuc2FjdGlvbikgewotICAgICAgICBp
ZiAobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lKQotICAgICAgICAg
ICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3RlclJlcXVlc3QodGhpcyk7Ci0KLSAgICAgICAgLy8g
UG9zc2libHkgYWJvcnQgdGhlIHRyYW5zYWN0aW9uLiBUaGlzIG11c3Qgb2NjdXIgYWZ0ZXIgdW5y
ZWdpc3RlcmluZyAoc28gdGhpcyByZXF1ZXN0Ci0gICAgICAgIC8vIGRvZXNuJ3QgcmVjZWl2ZSBh
IHNlY29uZCBlcnJvcikgYW5kIGJlZm9yZSBkZWFjdGl2YXRpbmcgKHdoaWNoIG1pZ2h0IHRyaWdn
ZXIgY29tbWl0KS4KLSAgICAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJy
b3JFdmVudCAmJiBkb250UHJldmVudERlZmF1bHQgJiYgIW1fcmVxdWVzdEFib3J0ZWQpIHsKLSAg
ICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEVycm9yKG1fZXJyb3IsIG1fZXJyb3JNZXNzYWdl
KTsKLSAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSBlYzsKLSAgICAgICAgICAg
IG1fdHJhbnNhY3Rpb24tPmFib3J0KGVjKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHRo
aXMgd2FzIHRoZSBsYXN0IHJlcXVlc3QgaW4gdGhlIHRyYW5zYWN0aW9uJ3MgbGlzdCwgaXQgbWF5
IGNvbW1pdCBoZXJlLgotICAgICAgICBpZiAoc2V0VHJhbnNhY3Rpb25BY3RpdmUpCi0gICAgICAg
ICAgICBtX3RyYW5zYWN0aW9uLT5zZXRBY3RpdmUoZmFsc2UpOwotICAgIH0KLQotICAgIGlmIChj
dXJzb3JUb05vdGlmeSkKLSAgICAgICAgY3Vyc29yVG9Ob3RpZnktPnBvc3RTdWNjZXNzSGFuZGxl
ckNhbGxiYWNrKCk7Ci0KLSAgICBpZiAobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0
YXRlOjpEb25lICYmICghY3Vyc29yVG9Ob3RpZnkgfHwgbV9jdXJzb3JGaW5pc2hlZCkgJiYgZXZl
bnQudHlwZSgpICE9IGV2ZW50TmFtZXMoKS51cGdyYWRlbmVlZGVkRXZlbnQpCi0gICAgICAgIG1f
aGFzUGVuZGluZ0FjdGl2aXR5ID0gZmFsc2U7Ci0KLSAgICByZXR1cm4gZG9udFByZXZlbnREZWZh
dWx0OwotfQotCi12b2lkIExlZ2FjeVJlcXVlc3Q6OnVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhh
bmRsZXIoKQotewotICAgIGlmIChtX3RyYW5zYWN0aW9uICYmICFtX3JlcXVlc3RBYm9ydGVkKSB7
Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEVycm9yKERPTUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OmdldEVycm9yTmFtZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6QWJvcnRF
cnJvcikpLCAiVW5jYXVnaHQgZXhjZXB0aW9uIGluIGV2ZW50IGhhbmRsZXIuIik7Ci0gICAgICAg
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSBlYzsKLSAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJv
cnQoZWMpOwotICAgIH0KLX0KLQotdm9pZCBMZWdhY3lSZXF1ZXN0Ojp0cmFuc2FjdGlvbkRpZEZp
bmlzaEFuZERpc3BhdGNoKCkKLXsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7Ci0gICAgQVNT
RVJUKG1fdHJhbnNhY3Rpb24tPmlzVmVyc2lvbkNoYW5nZSgpKTsKLSAgICBBU1NFUlQobV9yZWFk
eVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lKTsKLSAgICBBU1NFUlQoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBtX3RyYW5zYWN0aW9uID0gbnVsbHB0cjsKLSAgICBt
X3JlYWR5U3RhdGUgPSBJREJSZXF1ZXN0UmVhZHlTdGF0ZTo6UGVuZGluZzsKLX0KLQotdm9pZCBM
ZWdhY3lSZXF1ZXN0OjplbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmIGV2ZW50KQotewotICAgIEFT
U0VSVChtX3JlYWR5U3RhdGUgPT0gSURCUmVxdWVzdFJlYWR5U3RhdGU6OlBlbmRpbmcgfHwgbV9y
ZWFkeVN0YXRlID09IElEQlJlcXVlc3RSZWFkeVN0YXRlOjpEb25lKTsKLQotICAgIGlmIChtX2Nv
bnRleHRTdG9wcGVkIHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZWFkeVN0YXRlID09IElEQlJlcXVlc3RS
ZWFkeVN0YXRlOjpQZW5kaW5nIHx8IG1fZGlkRmlyZVVwZ3JhZGVOZWVkZWRFdmVudCwgIldoZW4g
cXVldWVpbmcgZXZlbnQgJXMsIG1fcmVhZHlTdGF0ZSB3YXMgJWQiLCBldmVudC0+dHlwZSgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksIHN0YXRpY19jYXN0PGludD4obV9yZWFkeVN0YXRlKSk7Ci0K
LSAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwotCi0gICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+ZXZlbnRRdWV1ZSgpLmVucXVldWVFdmVudChldmVudC5jb3B5UmVmKCkpKQotICAg
ICAgICBtX2VucXVldWVkRXZlbnRzLmFwcGVuZChXVEZNb3ZlKGV2ZW50KSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVJlcXVlc3QuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWE3NzRiOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5UmVxdWVzdC5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTYyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZm5kZWYgTGVnYWN5UmVxdWVzdF9oCi0jZGVmaW5lIExlZ2FjeVJlcXVlc3RfaAotCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKLSNpbmNsdWRlICJET01FcnJvci5oIgotI2luY2x1ZGUgIkRPTVJlcXVlc3RTdGF0ZS5oIgot
I2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKLSNpbmNsdWRlICJFdmVudC5oIgotI2luY2x1ZGUg
IkV2ZW50TGlzdGVuZXIuaCIKLSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIklE
QkNhbGxiYWNrcy5oIgotI2luY2x1ZGUgIklEQkN1cnNvci5oIgotI2luY2x1ZGUgIklEQkRhdGFi
YXNlQmFja2VuZC5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJhY2tzLmgiCi0jaW5jbHVk
ZSAiSURCT3BlbkRCUmVxdWVzdC5oIgotI2luY2x1ZGUgIkxlZ2FjeUFueS5oIgotI2luY2x1ZGUg
IlNjcmlwdFdyYXBwYWJsZS5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIExlZ2Fj
eVRyYW5zYWN0aW9uOwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBMZWdh
Y3lSZXF1ZXN0IDogcHVibGljIElEQk9wZW5EQlJlcXVlc3QsIHB1YmxpYyBJREJDYWxsYmFja3Mg
ewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TGVnYWN5UmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPExlZ2FjeUFueT4gc291cmNlLCBMZWdhY3lUcmFu
c2FjdGlvbiopOwotICAgIHN0YXRpYyBSZWY8TGVnYWN5UmVxdWVzdD4gY3JlYXRlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPExlZ2FjeUFueT4gc291cmNlLCBJREJEYXRhYmFz
ZUJhY2tlbmQ6OlRhc2tUeXBlLCBMZWdhY3lUcmFuc2FjdGlvbiopOwotICAgIHZpcnR1YWwgfkxl
Z2FjeVJlcXVlc3QoKTsKLQotICAgIHZpcnR1YWwgUmVmUHRyPElEQkFueT4gcmVzdWx0KEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSYpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwotICAgIFBhc3NSZWZQ
dHI8TGVnYWN5QW55PiBsZWdhY3lSZXN1bHQoRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwg
dW5zaWduZWQgc2hvcnQgZXJyb3JDb2RlKEV4Y2VwdGlvbkNvZGUmKSBjb25zdCBvdmVycmlkZSBm
aW5hbDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxET01FcnJvcj4gZXJyb3IoRXhjZXB0aW9uQ29kZVdp
dGhNZXNzYWdlJikgY29uc3Qgb3ZlcnJpZGUgZmluYWw7Ci0gICAgdmlydHVhbCBSZWZQdHI8SURC
QW55PiBzb3VyY2UoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKLSAgICB2
aXJ0dWFsIGNvbnN0IFN0cmluZyYgcmVhZHlTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwot
Ci0gICAgdm9pZCBwcmV2ZW50UHJvcGFnYXRpb24oKSB7IG1fcHJldmVudFByb3BhZ2F0aW9uID0g
dHJ1ZTsgfQotCi0gICAgdm9pZCBtYXJrRWFybHlEZWF0aCgpOwotICAgIHZvaWQgc2V0Q3Vyc29y
RGV0YWlscyhJbmRleGVkREI6OkN1cnNvclR5cGUsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9u
KTsKLSAgICB2b2lkIHNldFBlbmRpbmdDdXJzb3IoUGFzc1JlZlB0cjxMZWdhY3lDdXJzb3I+KTsK
LSAgICB2b2lkIGZpbmlzaEN1cnNvcigpOwotICAgIHZvaWQgYWJvcnQoKTsKLQotICAgIC8vIElE
QkNhbGxiYWNrcwotICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pIG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0Pikgb3ZlcnJpZGUgZmluYWw7Ci0gICAgdmlydHVhbCB2b2lk
IG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+KSBvdmVycmlkZSBmaW5hbDsK
LSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5Pikgb3ZlcnJpZGUg
ZmluYWw7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4pIG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+LCBQYXNzUmVmUHRyPElEQktleT4sIGNvbnN0IElEQktleVBhdGgmKSBv
dmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKGludDY0X3QpIG92ZXJy
aWRlIGZpbmFsOwotICAgIHZpcnR1YWwgdm9pZCBvblN1Y2Nlc3MoKSBvdmVycmlkZSBmaW5hbDsK
LSAgICB2aXJ0dWFsIHZvaWQgb25TdWNjZXNzKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0
cjxJREJLZXk+IHByaW1hcnlLZXksIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPikgb3ZlcnJpZGUg
ZmluYWw7Ci0gICAgdmlydHVhbCB2b2lkIG9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkRhdGFiYXNl
QmFja2VuZD4sIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKSBvdmVycmlkZTsKLQotICAgIC8v
IEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVudFRhcmdl
dEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsg
cmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOyB9Ci0gICAg
dmlydHVhbCB2b2lkIHVuY2F1Z2h0RXhjZXB0aW9uSW5FdmVudEhhbmRsZXIoKSBvdmVycmlkZSBm
aW5hbDsKLQotICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgIHZpcnR1
YWwgYm9vbCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHRyYW5z
YWN0aW9uRGlkRmluaXNoQW5kRGlzcGF0Y2goKTsKLQotICAgIElEQkRhdGFiYXNlQmFja2VuZDo6
VGFza1R5cGUgdGFza1R5cGUoKSB7IHJldHVybiBtX3Rhc2tUeXBlOyB9Ci0KLSAgICBET01SZXF1
ZXN0U3RhdGUqIHJlcXVlc3RTdGF0ZSgpIHsgcmV0dXJuICZtX3JlcXVlc3RTdGF0ZTsgfQotCi0g
ICAgLy8gQWN0aXZlRE9NT2JqZWN0IEFQSS4KLSAgICBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgdXNpbmcgSURCQ2FsbGJhY2tzOjpyZWY7Ci0gICAgdXNp
bmcgSURCQ2FsbGJhY2tzOjpkZXJlZjsKLQotcHJvdGVjdGVkOgotICAgIExlZ2FjeVJlcXVlc3Qo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8TGVnYWN5QW55PiBzb3VyY2UsIElE
QkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIExlZ2FjeVRyYW5zYWN0aW9uKik7Ci0gICAgdm9p
ZCBlbnF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYmKTsKLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRW5x
dWV1ZUV2ZW50KCkgY29uc3Q7Ci0gICAgdm9pZCBvblN1Y2Nlc3NJbnRlcm5hbChQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4pOwotICAgIHZvaWQgb25TdWNjZXNzSW50ZXJuYWwoY29u
c3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmKTsKLQotICAgIFJlZlB0cjxMZWdhY3lBbnk+IG1f
cmVzdWx0OwotICAgIHVuc2lnbmVkIHNob3J0IG1fZXJyb3JDb2RlOwotICAgIFN0cmluZyBtX2Vy
cm9yTWVzc2FnZTsKLSAgICBSZWZQdHI8RE9NRXJyb3I+IG1fZXJyb3I7Ci0gICAgYm9vbCBtX2Nv
bnRleHRTdG9wcGVkOwotICAgIFJlZlB0cjxMZWdhY3lUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlv
bjsKLSAgICBJREJSZXF1ZXN0UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7Ci0gICAgYm9vbCBtX3Jl
cXVlc3RBYm9ydGVkOyAvLyBNYXkgYmUgYWJvcnRlZCBieSB0cmFuc2FjdGlvbiB0aGVuIHJlY2Vp
dmUgYXN5bmMgb25zdWNjZXNzOyBpZ25vcmUgdnMuIGFzc2VydC4KLQotcHJpdmF0ZToKLSAgICAv
LyBBY3RpdmVET01PYmplY3QgQVBJLgotICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOwotICAgIGNv
bnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29s
IGNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdCBvdmVycmlkZTsKLQotICAg
IC8vIEV2ZW50VGFyZ2V0IEFQSS4KLSAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBv
dmVycmlkZSBmaW5hbCB7IHJlZigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIGRlcmVmRXZlbnRUYXJn
ZXQoKSBvdmVycmlkZSBmaW5hbCB7IGRlcmVmKCk7IH0KLQotICAgIFJlZlB0cjxMZWdhY3lDdXJz
b3I+IGdldFJlc3VsdEN1cnNvcigpOwotICAgIHZvaWQgc2V0UmVzdWx0Q3Vyc29yKFBhc3NSZWZQ
dHI8TGVnYWN5Q3Vyc29yPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4g
cHJpbWFyeUtleSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmKTsKLQotICAgIFJlZlB0
cjxMZWdhY3lBbnk+IG1fc291cmNlOwotICAgIGNvbnN0IElEQkRhdGFiYXNlQmFja2VuZDo6VGFz
a1R5cGUgbV90YXNrVHlwZTsKLQotICAgIGJvb2wgbV9oYXNQZW5kaW5nQWN0aXZpdHk7Ci0gICAg
VmVjdG9yPFJlZjxFdmVudD4+IG1fZW5xdWV1ZWRFdmVudHM7Ci0KLSAgICAvLyBPbmx5IHVzZWQg
aWYgdGhlIHJlc3VsdCB0eXBlIHdpbGwgYmUgYSBjdXJzb3IuCi0gICAgSW5kZXhlZERCOjpDdXJz
b3JUeXBlIG1fY3Vyc29yVHlwZTsKLSAgICBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiBtX2N1
cnNvckRpcmVjdGlvbjsKLSAgICBib29sIG1fY3Vyc29yRmluaXNoZWQ7Ci0gICAgUmVmUHRyPExl
Z2FjeUN1cnNvcj4gbV9wZW5kaW5nQ3Vyc29yOwotICAgIFJlZlB0cjxJREJLZXk+IG1fY3Vyc29y
S2V5OwotICAgIFJlZlB0cjxJREJLZXk+IG1fY3Vyc29yUHJpbWFyeUtleTsKLSAgICBEZXByZWNh
dGVkOjpTY3JpcHRWYWx1ZSBtX2N1cnNvclZhbHVlOwotICAgIGJvb2wgbV9kaWRGaXJlVXBncmFk
ZU5lZWRlZEV2ZW50OwotICAgIGJvb2wgbV9wcmV2ZW50UHJvcGFnYXRpb247Ci0KLSAgICBET01S
ZXF1ZXN0U3RhdGUgbV9yZXF1ZXN0U3RhdGU7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8vIExlZ2Fj
eVJlcXVlc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQ0MzM0MjUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDM3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
LSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkxlZ2Fj
eVRyYW5zYWN0aW9uLmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1
ZGUgIkV2ZW50UXVldWUuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIK
LSNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9u
LmgiCi0jaW5jbHVkZSAiSURCRXZlbnREaXNwYXRjaGVyLmgiCi0jaW5jbHVkZSAiSURCSW5kZXgu
aCIKLSNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIklEQlBlbmRpbmdUcmFu
c2FjdGlvbk1vbml0b3IuaCIKLSNpbmNsdWRlICJMZWdhY3lDdXJzb3IuaCIKLSNpbmNsdWRlICJM
ZWdhY3lPYmplY3RTdG9yZS5oIgotI2luY2x1ZGUgIkxlZ2FjeU9wZW5EQlJlcXVlc3QuaCIKLSNp
bmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxMZWdhY3lUcmFuc2FjdGlvbj4gTGVnYWN5VHJh
bnNhY3Rpb246OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnQ2NF90
IGlkLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUgbW9kZSwgTGVnYWN5RGF0YWJhc2UqIGRiKQotewotICAgIExlZ2FjeU9w
ZW5EQlJlcXVlc3QqIG9wZW5EQlJlcXVlc3QgPSBudWxscHRyOwotICAgIFJlZjxMZWdhY3lUcmFu
c2FjdGlvbj4gdHJhbnNhY3Rpb24oYWRvcHRSZWYoKm5ldyBMZWdhY3lUcmFuc2FjdGlvbihjb250
ZXh0LCBpZCwgb2JqZWN0U3RvcmVOYW1lcywgbW9kZSwgZGIsIG9wZW5EQlJlcXVlc3QsIElEQkRh
dGFiYXNlTWV0YWRhdGEoKSkpKTsKLSAgICB0cmFuc2FjdGlvbi0+c3VzcGVuZElmTmVlZGVkKCk7
Ci0gICAgcmV0dXJuIHRyYW5zYWN0aW9uOwotfQotCi1SZWY8TGVnYWN5VHJhbnNhY3Rpb24+IExl
Z2FjeVRyYW5zYWN0aW9uOjpjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
aW50NjRfdCBpZCwgTGVnYWN5RGF0YWJhc2UqIGRiLCBMZWdhY3lPcGVuREJSZXF1ZXN0KiBvcGVu
REJSZXF1ZXN0LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBwcmV2aW91c01ldGFkYXRhKQot
ewotICAgIFJlZjxMZWdhY3lUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24oYWRvcHRSZWYoKm5ldyBM
ZWdhY3lUcmFuc2FjdGlvbihjb250ZXh0LCBpZCwgVmVjdG9yPFN0cmluZz4oKSwgSW5kZXhlZERC
OjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UsIGRiLCBvcGVuREJSZXF1ZXN0LCBwcmV2
aW91c01ldGFkYXRhKSkpOwotICAgIHRyYW5zYWN0aW9uLT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAg
ICByZXR1cm4gdHJhbnNhY3Rpb247Ci19Ci0KLUxlZ2FjeVRyYW5zYWN0aW9uOjpMZWdhY3lUcmFu
c2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBpbnQ2NF90IGlkLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGUgbW9kZSwgTGVnYWN5RGF0YWJhc2UqIGRiLCBMZWdhY3lPcGVuREJSZXF1ZXN0KiBvcGVu
REJSZXF1ZXN0LCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBwcmV2aW91c01ldGFkYXRhKQot
ICAgIDogSURCVHJhbnNhY3Rpb24oY29udGV4dCkKLSAgICAsIG1faWQoaWQpCi0gICAgLCBtX2Rh
dGFiYXNlKGRiKQotICAgICwgbV9vYmplY3RTdG9yZU5hbWVzKG9iamVjdFN0b3JlTmFtZXMpCi0g
ICAgLCBtX29wZW5EQlJlcXVlc3Qob3BlbkRCUmVxdWVzdCkKLSAgICAsIG1fbW9kZShtb2RlKQot
ICAgICwgbV9zdGF0ZShBY3RpdmUpCi0gICAgLCBtX2hhc1BlbmRpbmdBY3Rpdml0eSh0cnVlKQot
ICAgICwgbV9jb250ZXh0U3RvcHBlZChmYWxzZSkKLSAgICAsIG1fcHJldmlvdXNNZXRhZGF0YShw
cmV2aW91c01ldGFkYXRhKQotewotICAgIGlmIChtb2RlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25Nb2RlOjpWZXJzaW9uQ2hhbmdlKSB7Ci0gICAgICAgIC8vIE5vdCBhY3RpdmUgdW50aWwgdGhl
IGNhbGxiYWNrLgotICAgICAgICBtX3N0YXRlID0gSW5hY3RpdmU7Ci0gICAgfQotCi0gICAgLy8g
V2UgcGFzcyBhIHJlZmVyZW5jZSBvZiB0aGlzIG9iamVjdCBiZWZvcmUgaXQgY2FuIGJlIGFkb3B0
ZWQuCi0gICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7Ci0gICAgaWYgKG1fc3RhdGUgPT0g
QWN0aXZlKQotICAgICAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yOjphZGROZXdUcmFu
c2FjdGlvbih0aGlzKTsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNyZWF0ZWQodGhpcyk7
Ci19Ci0KLUxlZ2FjeVRyYW5zYWN0aW9uOjp+TGVnYWN5VHJhbnNhY3Rpb24oKQotewotICAgIEFT
U0VSVChtX3N0YXRlID09IEZpbmlzaGVkIHx8IG1fY29udGV4dFN0b3BwZWQpOwotICAgIEFTU0VS
VChtX3JlcXVlc3RMaXN0LmlzRW1wdHkoKSB8fCBtX2NvbnRleHRTdG9wcGVkKTsKLX0KLQotY29u
c3QgU3RyaW5nJiBMZWdhY3lUcmFuc2FjdGlvbjo6bW9kZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1vZGVUb1N0cmluZyhtX21vZGUpOwotfQotCi1JREJEYXRhYmFzZSogTGVnYWN5VHJhbnNhY3Rp
b246OmRiKCkKLXsKLSAgICByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsKLX0KLQotdm9pZCBMZWdh
Y3lUcmFuc2FjdGlvbjo6c2V0RXJyb3IoUGFzc1JlZlB0cjxET01FcnJvcj4gZXJyb3IsIGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotICAgIEFTU0VSVChtX3N0YXRlICE9IEZpbmlzaGVk
KTsKLSAgICBBU1NFUlQoZXJyb3IpOwotCi0gICAgLy8gVGhlIGZpcnN0IGVycm9yIHRvIGJlIHNl
dCBpcyB0aGUgdHJ1ZSBjYXVzZSBvZiB0aGUKLSAgICAvLyB0cmFuc2FjdGlvbiBhYm9ydC4KLSAg
ICBpZiAoIW1fZXJyb3IpIHsKLSAgICAgICAgbV9lcnJvciA9IGVycm9yOwotICAgICAgICBtX2Vy
cm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxJREJPYmplY3RT
dG9yZT4gTGVnYWN5VHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJiBlYykKLXsKLSAgICBpZiAobV9zdGF0ZSA9PSBGaW5p
c2hlZCkgewotICAgICAgICBlYy5jb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRT
dGF0ZUVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBJREJPYmplY3RTdG9y
ZU1hcDo6aXRlcmF0b3IgaXQgPSBtX29iamVjdFN0b3JlTWFwLmZpbmQobmFtZSk7Ci0gICAgaWYg
KGl0ICE9IG1fb2JqZWN0U3RvcmVNYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBpdC0+dmFsdWU7
Ci0KLSAgICBpZiAoIWlzVmVyc2lvbkNoYW5nZSgpICYmICFtX29iamVjdFN0b3JlTmFtZXMuY29u
dGFpbnMobmFtZSkpIHsKLSAgICAgICAgZWMuY29kZSA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpO
b3RGb3VuZEVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpbnQ2NF90IG9i
amVjdFN0b3JlSWQgPSBtX2RhdGFiYXNlLT5maW5kT2JqZWN0U3RvcmVJZChuYW1lKTsKLSAgICBp
ZiAob2JqZWN0U3RvcmVJZCA9PSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpIHsK
LSAgICAgICAgQVNTRVJUKGlzVmVyc2lvbkNoYW5nZSgpKTsKLSAgICAgICAgZWMuY29kZSA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpOb3RGb3VuZEVycm9yOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0KLSAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSA9IG1fZGF0YWJh
c2UtPm1ldGFkYXRhKCk7Ci0KLSAgICBSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+IG9iamVjdFN0
b3JlID0gTGVnYWN5T2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0
KG9iamVjdFN0b3JlSWQpLCB0aGlzKTsKLSAgICBvYmplY3RTdG9yZUNyZWF0ZWQobmFtZSwgb2Jq
ZWN0U3RvcmUpOwotICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7Ci19Ci0KLXZvaWQg
TGVnYWN5VHJhbnNhY3Rpb246Om9iamVjdFN0b3JlQ3JlYXRlZChjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+IHBycE9iamVjdFN0b3JlKQotewotICAgIEFT
U0VSVChtX3N0YXRlICE9IEZpbmlzaGVkKTsKLSAgICBSZWZQdHI8TGVnYWN5T2JqZWN0U3RvcmU+
IG9iamVjdFN0b3JlID0gcHJwT2JqZWN0U3RvcmU7Ci0gICAgbV9vYmplY3RTdG9yZU1hcC5zZXQo
bmFtZSwgb2JqZWN0U3RvcmUpOwotICAgIGlmIChpc1ZlcnNpb25DaGFuZ2UoKSkKLSAgICAgICAg
bV9vYmplY3RTdG9yZUNsZWFudXBNYXAuc2V0KG9iamVjdFN0b3JlLCBvYmplY3RTdG9yZS0+bWV0
YWRhdGEoKSk7Ci19Ci0KLXZvaWQgTGVnYWN5VHJhbnNhY3Rpb246Om9iamVjdFN0b3JlRGVsZXRl
ZChjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgQVNTRVJUKG1fc3RhdGUgIT0gRmluaXNoZWQp
OwotICAgIEFTU0VSVChpc1ZlcnNpb25DaGFuZ2UoKSk7Ci0gICAgSURCT2JqZWN0U3RvcmVNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZU1hcC5maW5kKG5hbWUpOwotICAgIGlmIChpdCAh
PSBtX29iamVjdFN0b3JlTWFwLmVuZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxMZWdhY3lPYmplY3RT
dG9yZT4gb2JqZWN0U3RvcmUgPSBpdC0+dmFsdWU7Ci0gICAgICAgIG1fb2JqZWN0U3RvcmVNYXAu
cmVtb3ZlKG5hbWUpOwotICAgICAgICBvYmplY3RTdG9yZS0+bWFya0RlbGV0ZWQoKTsKLSAgICAg
ICAgbV9vYmplY3RTdG9yZUNsZWFudXBNYXAuc2V0KG9iamVjdFN0b3JlLCBvYmplY3RTdG9yZS0+
bWV0YWRhdGEoKSk7Ci0gICAgICAgIG1fZGVsZXRlZE9iamVjdFN0b3Jlcy5hZGQob2JqZWN0U3Rv
cmUpOwotICAgIH0KLX0KLQotdm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6c2V0QWN0aXZlKGJvb2wg
YWN0aXZlKQotewotICAgIExPRyhTdG9yYWdlQVBJLCAiTGVnYWN5VHJhbnNhY3Rpb246OnNldEFj
dGl2ZSglcykgZm9yIHRyYW5zYWN0aW9uIGlkICVsbGkiLCBhY3RpdmUgPyAidHJ1ZSIgOiAiZmFs
c2UiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KG1faWQpKTsKLSAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKG1fc3RhdGUgIT0gRmluaXNoZWQsICJBIGZpbmlzaGVkIHRyYW5zYWN0aW9uIHRyaWVkIHRv
IHNldEFjdGl2ZSglcykiLCBhY3RpdmUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLSAgICBpZiAobV9z
dGF0ZSA9PSBGaW5pc2hpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoYWN0aXZlICE9
IChtX3N0YXRlID09IEFjdGl2ZSkpOwotICAgIG1fc3RhdGUgPSBhY3RpdmUgPyBBY3RpdmUgOiBJ
bmFjdGl2ZTsKLQotICAgIGlmICghYWN0aXZlICYmIG1fcmVxdWVzdExpc3QuaXNFbXB0eSgpKQot
ICAgICAgICBiYWNrZW5kREIoKS0+Y29tbWl0KG1faWQpOwotfQotCi12b2lkIExlZ2FjeVRyYW5z
YWN0aW9uOjphYm9ydChFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmIGVjKQotewotICAgIGlmICht
X3N0YXRlID09IEZpbmlzaGluZyB8fCBtX3N0YXRlID09IEZpbmlzaGVkKSB7Ci0gICAgICAgIGVj
LmNvZGUgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZFN0YXRlRXJyb3I7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3N0YXRlID0gRmluaXNoaW5nOwotCi0gICAgd2hpbGUg
KCFtX3JlcXVlc3RMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8TGVnYWN5UmVxdWVz
dD4gcmVxdWVzdCA9ICptX3JlcXVlc3RMaXN0LmJlZ2luKCk7Ci0gICAgICAgIG1fcmVxdWVzdExp
c3QucmVtb3ZlKHJlcXVlc3QpOwotICAgICAgICByZXF1ZXN0LT5hYm9ydCgpOwotICAgIH0KLQot
ICAgIFJlZlB0cjxMZWdhY3lUcmFuc2FjdGlvbj4gc2VsZlJlZiA9IHRoaXM7Ci0gICAgYmFja2Vu
ZERCKCktPmFib3J0KG1faWQpOwotfQotCi1MZWdhY3lUcmFuc2FjdGlvbjo6T3BlbkN1cnNvck5v
dGlmaWVyOjpPcGVuQ3Vyc29yTm90aWZpZXIoUGFzc1JlZlB0cjxMZWdhY3lUcmFuc2FjdGlvbj4g
dHJhbnNhY3Rpb24sIExlZ2FjeUN1cnNvciogY3Vyc29yKQotICAgIDogbV90cmFuc2FjdGlvbih0
cmFuc2FjdGlvbikKLSAgICAsIG1fY3Vyc29yKGN1cnNvcikKLXsKLSAgICBtX3RyYW5zYWN0aW9u
LT5yZWdpc3Rlck9wZW5DdXJzb3IobV9jdXJzb3IpOwotfQotCi1MZWdhY3lUcmFuc2FjdGlvbjo6
T3BlbkN1cnNvck5vdGlmaWVyOjp+T3BlbkN1cnNvck5vdGlmaWVyKCkKLXsKLSAgICBpZiAobV9j
dXJzb3IpCi0gICAgICAgIG1fdHJhbnNhY3Rpb24tPnVucmVnaXN0ZXJPcGVuQ3Vyc29yKG1fY3Vy
c29yKTsKLX0KLQotdm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6T3BlbkN1cnNvck5vdGlmaWVyOjpj
dXJzb3JGaW5pc2hlZCgpCi17Ci0gICAgaWYgKG1fY3Vyc29yKSB7Ci0gICAgICAgIG1fdHJhbnNh
Y3Rpb24tPnVucmVnaXN0ZXJPcGVuQ3Vyc29yKG1fY3Vyc29yKTsKLSAgICAgICAgbV9jdXJzb3Ig
PSBudWxscHRyOwotICAgICAgICBtX3RyYW5zYWN0aW9uID0gbnVsbHB0cjsKLSAgICB9Ci19Ci0K
LXZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OnJlZ2lzdGVyT3BlbkN1cnNvcihMZWdhY3lDdXJzb3Iq
IGN1cnNvcikKLXsKLSAgICBtX29wZW5DdXJzb3JzLmFkZChjdXJzb3IpOwotfQotCi12b2lkIExl
Z2FjeVRyYW5zYWN0aW9uOjp1bnJlZ2lzdGVyT3BlbkN1cnNvcihMZWdhY3lDdXJzb3IqIGN1cnNv
cikKLXsKLSAgICBtX29wZW5DdXJzb3JzLnJlbW92ZShjdXJzb3IpOwotfQotCi12b2lkIExlZ2Fj
eVRyYW5zYWN0aW9uOjpjbG9zZU9wZW5DdXJzb3JzKCkKLXsKLSAgICBIYXNoU2V0PExlZ2FjeUN1
cnNvcio+IGN1cnNvcnM7Ci0gICAgY3Vyc29ycy5zd2FwKG1fb3BlbkN1cnNvcnMpOwotICAgIGZv
ciAoYXV0byYgY3Vyc29yIDogY3Vyc29ycykKLSAgICAgICAgY3Vyc29yLT5jbG9zZSgpOwotfQot
Ci12b2lkIExlZ2FjeVRyYW5zYWN0aW9uOjpyZWdpc3RlclJlcXVlc3QoTGVnYWN5UmVxdWVzdCog
cmVxdWVzdCkKLXsKLSAgICBBU1NFUlQocmVxdWVzdCk7Ci0gICAgQVNTRVJUKG1fc3RhdGUgPT0g
QWN0aXZlKTsKLSAgICBtX3JlcXVlc3RMaXN0LmFkZChyZXF1ZXN0KTsKLX0KLQotdm9pZCBMZWdh
Y3lUcmFuc2FjdGlvbjo6dW5yZWdpc3RlclJlcXVlc3QoTGVnYWN5UmVxdWVzdCogcmVxdWVzdCkK
LXsKLSAgICBBU1NFUlQocmVxdWVzdCk7Ci0gICAgLy8gSWYgd2UgYWJvcnRlZCB0aGUgcmVxdWVz
dCwgaXQgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiByZW1vdmVkLgotICAgIG1fcmVxdWVzdExpc3Qu
cmVtb3ZlKHJlcXVlc3QpOwotfQotCi12b2lkIExlZ2FjeVRyYW5zYWN0aW9uOjpvbkFib3J0KFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gcHJwRXJyb3IpCi17Ci0gICAgTE9HKFN0b3JhZ2VB
UEksICJMZWdhY3lUcmFuc2FjdGlvbjo6b25BYm9ydCIpOwotICAgIFJlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPiBlcnJvciA9IHBycEVycm9yOwotICAgIEFTU0VSVChtX3N0YXRlICE9IEZpbmlzaGVk
KTsKLQotICAgIGlmIChtX3N0YXRlICE9IEZpbmlzaGluZykgewotICAgICAgICBBU1NFUlQoZXJy
b3IuZ2V0KCkpOwotICAgICAgICBzZXRFcnJvcihET01FcnJvcjo6Y3JlYXRlKGVycm9yLT5uYW1l
KCkpLCBlcnJvci0+bWVzc2FnZSgpKTsKLQotICAgICAgICAvLyBBYm9ydCB3YXMgbm90IHRyaWdn
ZXJlZCBieSBmcm9udC1lbmQsIHNvIG91dHN0YW5kaW5nIHJlcXVlc3RzIG11c3QKLSAgICAgICAg
Ly8gYmUgYWJvcnRlZCBub3cuCi0gICAgICAgIHdoaWxlICghbV9yZXF1ZXN0TGlzdC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxMZWdhY3lSZXF1ZXN0PiByZXF1ZXN0ID0gKm1fcmVx
dWVzdExpc3QuYmVnaW4oKTsKLSAgICAgICAgICAgIG1fcmVxdWVzdExpc3QucmVtb3ZlKHJlcXVl
c3QpOwotICAgICAgICAgICAgcmVxdWVzdC0+YWJvcnQoKTsKLSAgICAgICAgfQotICAgICAgICBt
X3N0YXRlID0gRmluaXNoaW5nOwotICAgIH0KLQotICAgIGlmIChpc1ZlcnNpb25DaGFuZ2UoKSkg
ewotICAgICAgICBmb3IgKGF1dG8mIG9iamVjdFN0b3JlIDogbV9vYmplY3RTdG9yZUNsZWFudXBN
YXApCi0gICAgICAgICAgICBvYmplY3RTdG9yZS5rZXktPnNldE1ldGFkYXRhKG9iamVjdFN0b3Jl
LnZhbHVlKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+c2V0TWV0YWRhdGEobV9wcmV2aW91c01ldGFk
YXRhKTsKLSAgICAgICAgbV9kYXRhYmFzZS0+Y2xvc2UoKTsKLSAgICB9Ci0gICAgbV9vYmplY3RT
dG9yZUNsZWFudXBNYXAuY2xlYXIoKTsKLSAgICBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICAv
LyBFbnF1ZXVlIGV2ZW50cyBiZWZvcmUgbm90aWZ5aW5nIGRhdGFiYXNlLCBhcyBkYXRhYmFzZSBt
YXkgY2xvc2Ugd2hpY2ggZW5xdWV1ZXMgbW9yZSBldmVudHMgYW5kIG9yZGVyIG1hdHRlcnMuCi0g
ICAgZW5xdWV1ZUV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQsIHRy
dWUsIGZhbHNlKSk7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25GaW5pc2hlZCh0aGlzKTsK
LX0KLQotdm9pZCBMZWdhY3lUcmFuc2FjdGlvbjo6b25Db21wbGV0ZSgpCi17Ci0gICAgTE9HKFN0
b3JhZ2VBUEksICJMZWdhY3lUcmFuc2FjdGlvbjo6b25Db21wbGV0ZSIpOwotICAgIEFTU0VSVCht
X3N0YXRlICE9IEZpbmlzaGVkKTsKLSAgICBtX3N0YXRlID0gRmluaXNoaW5nOwotICAgIG1fb2Jq
ZWN0U3RvcmVDbGVhbnVwTWFwLmNsZWFyKCk7Ci0gICAgY2xvc2VPcGVuQ3Vyc29ycygpOwotCi0g
ICAgLy8gRW5xdWV1ZSBldmVudHMgYmVmb3JlIG5vdGlmeWluZyBkYXRhYmFzZSwgYXMgZGF0YWJh
c2UgbWF5IGNsb3NlIHdoaWNoIGVucXVldWVzIG1vcmUgZXZlbnRzIGFuZCBvcmRlciBtYXR0ZXJz
LgotICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5jb21wbGV0ZUV2
ZW50LCBmYWxzZSwgZmFsc2UpKTsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVk
KHRoaXMpOwotfQotCi1ib29sIExlZ2FjeVRyYW5zYWN0aW9uOjpoYXNQZW5kaW5nQWN0aXZpdHko
KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbiBhbiBpZGVhbCB3b3JsZCwgd2Ugc2hvdWxkIHJl
dHVybiB0cnVlIGFzIGxvbmcgYXMgYW55b25lIGhhcyBhIG9yIGNhbgotICAgIC8vICAgICAgICBn
ZXQgYSBoYW5kbGUgdG8gdXMgb3IgYW55IGNoaWxkIHJlcXVlc3Qgb2JqZWN0IGFuZCBhbnkgb2Yg
dGhvc2UgaGF2ZQotICAgIC8vICAgICAgICBldmVudCBsaXN0ZW5lcnMuIFRoaXMgaXMgIGluIG9y
ZGVyIHRvIGhhbmRsZSB1c2VyIGdlbmVyYXRlZCBldmVudHMgcHJvcGVybHkuCi0gICAgcmV0dXJu
IG1faGFzUGVuZGluZ0FjdGl2aXR5ICYmICFtX2NvbnRleHRTdG9wcGVkOwotfQotCi1ib29sIExl
Z2FjeVRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVudCkKLXsKLSAgICBMT0co
U3RvcmFnZUFQSSwgIkxlZ2FjeVRyYW5zYWN0aW9uOjpkaXNwYXRjaEV2ZW50Iik7Ci0gICAgQVNT
RVJUKG1fc3RhdGUgIT0gRmluaXNoZWQpOwotICAgIEFTU0VSVChtX2hhc1BlbmRpbmdBY3Rpdml0
eSk7Ci0gICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0gICAgQVNTRVJUKGV2
ZW50LnRhcmdldCgpID09IHRoaXMpOwotICAgIG1fc3RhdGUgPSBGaW5pc2hlZDsKLQotICAgIC8v
IEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCi0gICAgZm9yIChhdXRvJiBvYmplY3RTdG9yZSA6IG1f
b2JqZWN0U3RvcmVNYXApCi0gICAgICAgIG9iamVjdFN0b3JlLnZhbHVlLT50cmFuc2FjdGlvbkZp
bmlzaGVkKCk7Ci0gICAgbV9vYmplY3RTdG9yZU1hcC5jbGVhcigpOwotICAgIGZvciAoYXV0byYg
b2JqZWN0U3RvcmUgOiBtX2RlbGV0ZWRPYmplY3RTdG9yZXMpCi0gICAgICAgIG9iamVjdFN0b3Jl
LT50cmFuc2FjdGlvbkZpbmlzaGVkKCk7Ci0gICAgbV9kZWxldGVkT2JqZWN0U3RvcmVzLmNsZWFy
KCk7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gdGFyZ2V0czsKLSAgICB0YXJn
ZXRzLmFwcGVuZCh0aGlzKTsKLSAgICB0YXJnZXRzLmFwcGVuZChkYigpKTsKLQotICAgIC8vIEZJ
WE1FOiBXaGVuIHdlIGFsbG93IGN1c3RvbSBldmVudCBkaXNwYXRjaGluZywgdGhpcyB3aWxsIHBy
b2JhYmx5IG5lZWQgdG8gY2hhbmdlLgotICAgIEFTU0VSVChldmVudC50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmNvbXBsZXRlRXZlbnQgfHwgZXZlbnQudHlwZSgpID09IGV2ZW50TmFtZXMoKS5hYm9y
dEV2ZW50KTsKLSAgICBib29sIHJldHVyblZhbHVlID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaChldmVudCwgdGFyZ2V0cyk7Ci0gICAgLy8gRklYTUU6IFRyeSB0byBjb25zdHJ1Y3QgYSB0
ZXN0IHdoZXJlIHx0aGlzfCBvdXRsaXZlcyBvcGVuREJSZXF1ZXN0IGFuZCB3ZQotICAgIC8vIGdl
dCBhIGNyYXNoLgotICAgIGlmIChtX29wZW5EQlJlcXVlc3QpIHsKLSAgICAgICAgQVNTRVJUKGlz
VmVyc2lvbkNoYW5nZSgpKTsKLSAgICAgICAgbV9vcGVuREJSZXF1ZXN0LT50cmFuc2FjdGlvbkRp
ZEZpbmlzaEFuZERpc3BhdGNoKCk7Ci0gICAgfQotICAgIG1faGFzUGVuZGluZ0FjdGl2aXR5ID0g
ZmFsc2U7Ci0gICAgcmV0dXJuIHJldHVyblZhbHVlOwotfQotCi1ib29sIExlZ2FjeVRyYW5zYWN0
aW9uOjpjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkgY29uc3QKLXsKLSAgICAvLyBG
SVhNRTogVGVjaG5pY2FsbHkgd2UgY2FuIHN1c3BlbmQgYmVmb3JlIHRoZSBmaXJzdCByZXF1ZXN0
IGlzIHNjaGVkdWxlCi0gICAgLy8gICAgICAgIGFuZCBhZnRlciB0aGUgY29tcGxldGUvYWJvcnQg
ZXZlbnQgaXMgZW5xdWV1ZWQuCi0gICAgcmV0dXJuIG1fc3RhdGUgPT0gRmluaXNoZWQ7Ci19Ci0K
LXZvaWQgTGVnYWN5VHJhbnNhY3Rpb246OnN0b3AoKQotewotICAgIG1fY29udGV4dFN0b3BwZWQg
PSB0cnVlOwotICAgIEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZSBlYzsKLSAgICBhYm9ydChlYyk7
Ci19Ci0KLWNvbnN0IGNoYXIqIExlZ2FjeVRyYW5zYWN0aW9uOjphY3RpdmVET01PYmplY3ROYW1l
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gIkxlZ2FjeVRyYW5zYWN0aW9uIjsKLX0KLQotdm9pZCBM
ZWdhY3lUcmFuc2FjdGlvbjo6ZW5xdWV1ZUV2ZW50KFJlZjxFdmVudD4mJiBldmVudCkKLXsKLSAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fc3RhdGUgIT0gRmluaXNoZWQsICJBIGZpbmlzaGVkIHRy
YW5zYWN0aW9uIHRyaWVkIHRvIGVucXVldWUgYW4gZXZlbnQgb2YgdHlwZSAlcy4iLCBldmVudC0+
dHlwZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlmIChtX2NvbnRleHRTdG9wcGVk
IHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGV2
ZW50LT5zZXRUYXJnZXQodGhpcyk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVu
dFF1ZXVlKCkuZW5xdWV1ZUV2ZW50KFdURk1vdmUoZXZlbnQpKTsKLX0KLQotSURCRGF0YWJhc2VC
YWNrZW5kKiBMZWdhY3lUcmFuc2FjdGlvbjo6YmFja2VuZERCKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9kYXRhYmFzZS0+YmFja2VuZCgpOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xlZ2FjeS9MZWdhY3lUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDFkNjk2YTkuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGVnYWN5L0xlZ2FjeVRyYW5zYWN0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
NTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgTGVnYWN5VHJhbnNhY3Rpb25faAotI2RlZmluZSBM
ZWdhY3lUcmFuc2FjdGlvbl9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2lu
Y2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkRPTUVycm9yLmgiCi0jaW5jbHVk
ZSAiRXZlbnQuaCIKLSNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCi0jaW5jbHVkZSAiRXZlbnRU
YXJnZXQuaCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZU1ldGFkYXRhLmgiCi0jaW5jbHVkZSAiSURC
VHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlICJJbmRleGVkREIuaCIKLSNpbmNsdWRlICJMZWdhY3lE
YXRhYmFzZS5oIgotI2luY2x1ZGUgIkxlZ2FjeVJlcXVlc3QuaCIKLSNpbmNsdWRlICJTY3JpcHRX
cmFwcGFibGUuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSURCRGF0YWJhc2VCYWNr
ZW5kOwotY2xhc3MgSURCRGF0YWJhc2VFcnJvcjsKLWNsYXNzIExlZ2FjeUN1cnNvcjsKLWNsYXNz
IExlZ2FjeU9iamVjdFN0b3JlOwotY2xhc3MgTGVnYWN5T3BlbkRCUmVxdWVzdDsKLXN0cnVjdCBJ
REJPYmplY3RTdG9yZU1ldGFkYXRhOwotCi1jbGFzcyBMZWdhY3lUcmFuc2FjdGlvbiBmaW5hbCA6
IHB1YmxpYyBJREJUcmFuc2FjdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxMZWdhY3lU
cmFuc2FjdGlvbj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBpbnQ2NF90LCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgb2JqZWN0U3RvcmVOYW1lcywgSW5kZXhlZERCOjpUcmFuc2FjdGlv
bk1vZGUsIExlZ2FjeURhdGFiYXNlKik7Ci0gICAgc3RhdGljIFJlZjxMZWdhY3lUcmFuc2FjdGlv
bj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBpbnQ2NF90LCBMZWdhY3lEYXRhYmFz
ZSosIExlZ2FjeU9wZW5EQlJlcXVlc3QqLCBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBwcmV2
aW91c01ldGFkYXRhKTsKLSAgICB2aXJ0dWFsIH5MZWdhY3lUcmFuc2FjdGlvbigpOwotCi0gICAg
SURCRGF0YWJhc2VCYWNrZW5kKiBiYWNrZW5kREIoKSBjb25zdDsKLQotICAgIGludDY0X3QgaWQo
KSBjb25zdCB7IHJldHVybiBtX2lkOyB9Ci0gICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUgPT0gQWN0aXZlOyB9Ci0gICAgYm9vbCBpc0ZpbmlzaGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSA9PSBGaW5pc2hlZDsgfQotICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0
IHsgcmV0dXJuIG1fbW9kZSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6UmVhZE9ubHk7
IH0KLSAgICBib29sIGlzVmVyc2lvbkNoYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZSA9PSBJ
bmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZTsgfQotCi0gICAgdmlydHVh
bCBjb25zdCBTdHJpbmcmIG1vZGUoKSBjb25zdCBvdmVycmlkZSBmaW5hbDsKLSAgICB2aXJ0dWFs
IElEQkRhdGFiYXNlKiBkYigpIG92ZXJyaWRlIGZpbmFsOwotICAgIHZpcnR1YWwgUmVmUHRyPERP
TUVycm9yPiBlcnJvcigpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIG1fZXJyb3I7IH0K
LSAgICB2aXJ0dWFsIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UmKSBvdmVycmlkZSBmaW5hbDsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWJvcnQoRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdlJikgb3ZlcnJpZGUg
ZmluYWw7Ci0KLSAgICBjbGFzcyBPcGVuQ3Vyc29yTm90aWZpZXIgewotICAgIHB1YmxpYzoKLSAg
ICAgICAgT3BlbkN1cnNvck5vdGlmaWVyKFBhc3NSZWZQdHI8TGVnYWN5VHJhbnNhY3Rpb24+LCBM
ZWdhY3lDdXJzb3IqKTsKLSAgICAgICAgfk9wZW5DdXJzb3JOb3RpZmllcigpOwotICAgICAgICB2
b2lkIGN1cnNvckZpbmlzaGVkKCk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPExlZ2Fj
eVRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwotICAgICAgICBMZWdhY3lDdXJzb3IqIG1fY3Vy
c29yOwotICAgIH07Ci0KLSAgICB2b2lkIHJlZ2lzdGVyUmVxdWVzdChMZWdhY3lSZXF1ZXN0Kik7
Ci0gICAgdm9pZCB1bnJlZ2lzdGVyUmVxdWVzdChMZWdhY3lSZXF1ZXN0Kik7Ci0gICAgdm9pZCBv
YmplY3RTdG9yZUNyZWF0ZWQoY29uc3QgU3RyaW5nJiwgUGFzc1JlZlB0cjxMZWdhY3lPYmplY3RT
dG9yZT4pOwotICAgIHZvaWQgb2JqZWN0U3RvcmVEZWxldGVkKGNvbnN0IFN0cmluZyYpOwotICAg
IHZvaWQgc2V0QWN0aXZlKGJvb2wpOwotICAgIHZvaWQgc2V0RXJyb3IoUGFzc1JlZlB0cjxET01F
cnJvcj4sIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLQotICAgIHZvaWQgb25BYm9ydChQ
YXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KTsKLSAgICB2b2lkIG9uQ29tcGxldGUoKTsKLQot
ICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgdmlydHVhbCBFdmVudFRhcmdldEludGVyZmFjZSBldmVu
dFRhcmdldEludGVyZmFjZSgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIElEQlRyYW5z
YWN0aW9uRXZlbnRUYXJnZXRJbnRlcmZhY2VUeXBlOyB9Ci0gICAgdmlydHVhbCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgZmlu
YWwgeyByZXR1cm4gQWN0aXZlRE9NT2JqZWN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7IH0K
LQotICAgIHVzaW5nIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50OwotICAgIHZpcnR1YWwgYm9v
bCBkaXNwYXRjaEV2ZW50KEV2ZW50Jikgb3ZlcnJpZGUgZmluYWw7Ci0KLSAgICAvLyBBY3RpdmVE
T01PYmplY3QKLSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgTGVnYWN5VHJhbnNhY3Rpb24oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIGludDY0X3QsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgSW5kZXhlZERC
OjpUcmFuc2FjdGlvbk1vZGUsIExlZ2FjeURhdGFiYXNlKiwgTGVnYWN5T3BlbkRCUmVxdWVzdCos
IGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKTsKLQotICAgIHZvaWQgZW5xdWV1ZUV2ZW50KFJl
ZjxFdmVudD4mJik7Ci0gICAgdm9pZCBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0KLSAgICB2b2lkIHJl
Z2lzdGVyT3BlbkN1cnNvcihMZWdhY3lDdXJzb3IqKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJPcGVu
Q3Vyc29yKExlZ2FjeUN1cnNvciopOwotCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0IEFQSS4KLSAg
ICBib29sIGNhblN1c3BlbmRGb3JEb2N1bWVudFN1c3BlbnNpb24oKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLSAgICBjb25zdCBjaGFyKiBhY3RpdmVET01PYmpl
Y3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICAvLyBFdmVudFRhcmdldCBBUEkuCi0gICAg
dmlydHVhbCB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQotICAgIHZp
cnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyBkZXJlZigpOyB9Ci0KLSAg
ICBlbnVtIFN0YXRlIHsKLSAgICAgICAgSW5hY3RpdmUsIC8vIENyZWF0ZWQgb3Igc3RhcnRlZCwg
YnV0IG5vdCBpbiBhbiBldmVudCBjYWxsYmFjawotICAgICAgICBBY3RpdmUsIC8vIENyZWF0ZWQg
b3Igc3RhcnRlZCwgaW4gY3JlYXRpb24gc2NvcGUgb3IgYW4gZXZlbnQgY2FsbGJhY2sKLSAgICAg
ICAgRmluaXNoaW5nLCAvLyBJbiB0aGUgcHJvY2VzcyBvZiBhYm9ydGluZyBvciBjb21wbGV0aW5n
LgotICAgICAgICBGaW5pc2hlZCwgLy8gTm8gbW9yZSBldmVudHMgd2lsbCBmaXJlIGFuZCBubyBu
ZXcgcmVxdWVzdHMgbWF5IGJlIGZpbGVkLgotICAgIH07Ci0KLSAgICBpbnQ2NF90IG1faWQ7Ci0g
ICAgUmVmUHRyPExlZ2FjeURhdGFiYXNlPiBtX2RhdGFiYXNlOwotICAgIGNvbnN0IFZlY3RvcjxT
dHJpbmc+IG1fb2JqZWN0U3RvcmVOYW1lczsKLSAgICBMZWdhY3lPcGVuREJSZXF1ZXN0KiBtX29w
ZW5EQlJlcXVlc3Q7Ci0gICAgY29uc3QgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUgbV9tb2Rl
OwotICAgIFN0YXRlIG1fc3RhdGU7Ci0gICAgYm9vbCBtX2hhc1BlbmRpbmdBY3Rpdml0eTsKLSAg
ICBib29sIG1fY29udGV4dFN0b3BwZWQ7Ci0gICAgUmVmUHRyPERPTUVycm9yPiBtX2Vycm9yOwot
ICAgIFN0cmluZyBtX2Vycm9yTWVzc2FnZTsKLQotICAgIExpc3RIYXNoU2V0PFJlZlB0cjxMZWdh
Y3lSZXF1ZXN0Pj4gbV9yZXF1ZXN0TGlzdDsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4+IElEQk9iamVjdFN0b3JlTWFwOwotICAgIElEQk9i
amVjdFN0b3JlTWFwIG1fb2JqZWN0U3RvcmVNYXA7Ci0KLSAgICB0eXBlZGVmIEhhc2hTZXQ8UmVm
UHRyPExlZ2FjeU9iamVjdFN0b3JlPj4gSURCT2JqZWN0U3RvcmVTZXQ7Ci0gICAgSURCT2JqZWN0
U3RvcmVTZXQgbV9kZWxldGVkT2JqZWN0U3RvcmVzOwotCi0gICAgdHlwZWRlZiBIYXNoTWFwPFJl
ZlB0cjxMZWdhY3lPYmplY3RTdG9yZT4sIElEQk9iamVjdFN0b3JlTWV0YWRhdGE+IElEQk9iamVj
dFN0b3JlTWV0YWRhdGFNYXA7Ci0gICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YU1hcCBtX29iamVj
dFN0b3JlQ2xlYW51cE1hcDsKLSAgICBJREJEYXRhYmFzZU1ldGFkYXRhIG1fcHJldmlvdXNNZXRh
ZGF0YTsKLQotICAgIEhhc2hTZXQ8TGVnYWN5Q3Vyc29yKj4gbV9vcGVuQ3Vyc29yczsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQotCi0jZW5kaWYgLy8gTGVnYWN5VHJhbnNhY3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVZlcnNpb25DaGFuZ2VFdmVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kvTGVnYWN5VmVy
c2lvbkNoYW5nZUV2ZW50LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIyZjc1
OS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdhY3kv
TGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTGVnYWN5VmVyc2lvbkNo
YW5nZUV2ZW50LmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1MZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQ6OkxlZ2FjeVZlcnNpb25DaGFu
Z2VFdmVudCh1bnNpZ25lZCBsb25nIGxvbmcgb2xkVmVyc2lvbiwgdW5zaWduZWQgbG9uZyBsb25n
IG5ld1ZlcnNpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlKQotICAgIDogSURCVmVy
c2lvbkNoYW5nZUV2ZW50KGV2ZW50VHlwZSkKLSAgICAsIG1fb2xkVmVyc2lvbihvbGRWZXJzaW9u
KQotICAgICwgbV9uZXdWZXJzaW9uKG5ld1ZlcnNpb24pCi17Ci19Ci0KLU9wdGlvbmFsPHVpbnQ2
NF90PiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQ6Om5ld1ZlcnNpb24oKSBjb25zdAotewotICAg
IHJldHVybiBtX25ld1ZlcnNpb247Ci19Ci0KLUV2ZW50SW50ZXJmYWNlIExlZ2FjeVZlcnNpb25D
aGFuZ2VFdmVudDo6ZXZlbnRJbnRlcmZhY2UoKSBjb25zdAotewotICAgIHJldHVybiBJREJWZXJz
aW9uQ2hhbmdlRXZlbnRJbnRlcmZhY2VUeXBlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGVnYWN5L0xlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGVnYWN5L0xlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlYmRiNjIwLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xlZ2FjeS9MZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaAorKysg
L2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIExlZ2FjeVZlcnNpb25D
aGFuZ2VFdmVudF9oCi0jZGVmaW5lIExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudF9oCi0KLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2luY2x1ZGUgIklEQlZlcnNpb25DaGFuZ2VFdmVu
dC5oIgotI2luY2x1ZGUgIkluZGV4ZWREQi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudCBmaW5hbCA6IHB1YmxpYyBJREJWZXJzaW9uQ2hh
bmdlRXZlbnQgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TGVnYWN5VmVyc2lvbkNoYW5nZUV2
ZW50PiBjcmVhdGUodW5zaWduZWQgbG9uZyBsb25nIG9sZFZlcnNpb24sIHVuc2lnbmVkIGxvbmcg
bG9uZyBuZXdWZXJzaW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudChvbGRW
ZXJzaW9uLCBuZXdWZXJzaW9uLCBldmVudFR5cGUpKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAg
TGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50KHVuc2lnbmVkIGxvbmcgbG9uZyBvbGRWZXJzaW9uLCB1
bnNpZ25lZCBsb25nIGxvbmcgbmV3VmVyc2lvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5
cGUpOwotCi0gICAgdmlydHVhbCB1aW50NjRfdCBvbGRWZXJzaW9uKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9vbGRWZXJzaW9uOyB9Ci0gICAgdmlydHVhbCBPcHRpb25hbDx1aW50NjRfdD4g
bmV3VmVyc2lvbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgRXZlbnRJbnRlcmZhY2Ug
ZXZlbnRJbnRlcmZhY2UoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHVpbnQ2NF90IG1fb2xkVmVy
c2lvbjsKLSAgICB1aW50NjRfdCBtX25ld1ZlcnNpb247Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotI2VuZGlmIC8v
IExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCmluZGV4IDY4
MjM2YWIuLjY0MWU0NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuY3BwCkBAIC02OSw3ICs2OSw3IEBA
IFNRTGl0ZUlEQkN1cnNvcjo6U1FMaXRlSURCQ3Vyc29yKFNRTGl0ZUlEQlRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbiwgY29uc3QgSURCQ3VyCiAgICAgOiBtX3RyYW5zYWN0aW9uKCZ0cmFuc2FjdGlv
bikKICAgICAsIG1fY3Vyc29ySWRlbnRpZmllcihpbmZvLmlkZW50aWZpZXIoKSkKICAgICAsIG1f
b2JqZWN0U3RvcmVJRChpbmZvLm9iamVjdFN0b3JlSWRlbnRpZmllcigpKQotICAgICwgbV9pbmRl
eElEKGluZm8uY3Vyc29yU291cmNlKCkgPT0gSW5kZXhlZERCOjpDdXJzb3JTb3VyY2U6OkluZGV4
ID8gaW5mby5zb3VyY2VJZGVudGlmaWVyKCkgOiBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQp
CisgICAgLCBtX2luZGV4SUQoaW5mby5jdXJzb3JTb3VyY2UoKSA9PSBJbmRleGVkREI6OkN1cnNv
clNvdXJjZTo6SW5kZXggPyBpbmZvLnNvdXJjZUlkZW50aWZpZXIoKSA6IElEQkluZGV4SW5mbzo6
SW52YWxpZElkKQogICAgICwgbV9jdXJzb3JEaXJlY3Rpb24oaW5mby5jdXJzb3JEaXJlY3Rpb24o
KSkKICAgICAsIG1fa2V5UmFuZ2UoaW5mby5yYW5nZSgpKQogewpAQCAtODAsNyArODAsNyBAQCBT
UUxpdGVJREJDdXJzb3I6OlNRTGl0ZUlEQkN1cnNvcihTUUxpdGVJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIGNvbnN0IHVpbnQ2NAogICAgIDogbV90cmFuc2FjdGlvbigmdHJhbnNhY3Rpb24p
CiAgICAgLCBtX2N1cnNvcklkZW50aWZpZXIodHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JZGVudGlm
aWVyKCkpCiAgICAgLCBtX29iamVjdFN0b3JlSUQob2JqZWN0U3RvcmVJRCkKLSAgICAsIG1faW5k
ZXhJRChpbmRleElEID8gaW5kZXhJRCA6IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkKKyAg
ICAsIG1faW5kZXhJRChpbmRleElEID8gaW5kZXhJRCA6IElEQkluZGV4SW5mbzo6SW52YWxpZElk
KQogICAgICwgbV9jdXJzb3JEaXJlY3Rpb24oSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246Ok5l
eHQpCiAgICAgLCBtX2tleVJhbmdlKHJhbmdlKQogICAgICwgbV9iYWNraW5nU3RvcmVDdXJzb3Io
dHJ1ZSkKQEAgLTE2Nyw3ICsxNjcsNyBAQCBib29sIFNRTGl0ZUlEQkN1cnNvcjo6ZXN0YWJsaXNo
U3RhdGVtZW50KCkKICAgICBBU1NFUlQoIW1fc3RhdGVtZW50KTsKICAgICBTdHJpbmcgc3FsOwog
Ci0gICAgaWYgKG1faW5kZXhJRCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAg
ICBpZiAobV9pbmRleElEICE9IElEQkluZGV4SW5mbzo6SW52YWxpZElkKSB7CiAgICAgICAgIHNx
bCA9IGJ1aWxkSW5kZXhTdGF0ZW1lbnQobV9rZXlSYW5nZSwgbV9jdXJzb3JEaXJlY3Rpb24pOwog
ICAgICAgICBtX2JvdW5kSUQgPSBtX2luZGV4SUQ7CiAgICAgfSBlbHNlIHsKQEAgLTM3MCw3ICsz
NzAsNyBAQCBTUUxpdGVJREJDdXJzb3I6OkFkdmFuY2VSZXN1bHQgU1FMaXRlSURCQ3Vyc29yOjpp
bnRlcm5hbEFkdmFuY2VPbmNlKCkKICAgICBtX2N1cnJlbnRWYWx1ZUJ1ZmZlciA9IGtleURhdGE7
CiAKICAgICAvLyBUaGUgcHJpbWFyeUtleSBvZiBhbiBPYmplY3RTdG9yZSBjdXJzb3IgaXMgdGhl
IHNhbWUgYXMgaXRzIGtleS4KLSAgICBpZiAobV9pbmRleElEID09IElEQkluZGV4TWV0YWRhdGE6
OkludmFsaWRJZCkKKyAgICBpZiAobV9pbmRleElEID09IElEQkluZGV4SW5mbzo6SW52YWxpZElk
KQogICAgICAgICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0gbV9jdXJyZW50S2V5OwogICAgIGVsc2Ug
ewogICAgICAgICBpZiAoIWRlc2VyaWFsaXplSURCS2V5RGF0YShrZXlEYXRhLmRhdGEoKSwga2V5
RGF0YS5zaXplKCksIG1fY3VycmVudFByaW1hcnlLZXkpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQ3Vyc29yLmgKaW5k
ZXggZGRmMDM4My4uYTg0MTkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkN1cnNvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJDdXJzb3IuaApAQCAtMjcsNyArMjcsNyBA
QAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJJREJEYXRhYmFz
ZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJJREJJbmRleEluZm8uaCIKICNpbmNsdWRlICJJREJLZXlE
YXRhLmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSURCUmVzb3Vy
Y2VJZGVudGlmaWVyLmgiCkBAIC05Myw3ICs5Myw3IEBAIHByaXZhdGU6CiAgICAgU1FMaXRlSURC
VHJhbnNhY3Rpb24qIG1fdHJhbnNhY3Rpb247CiAgICAgSURCUmVzb3VyY2VJZGVudGlmaWVyIG1f
Y3Vyc29ySWRlbnRpZmllcjsKICAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJRDsKLSAgICBpbnQ2
NF90IG1faW5kZXhJRCB7IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCB9OworICAgIGludDY0
X3QgbV9pbmRleElEIHsgSURCSW5kZXhJbmZvOjpJbnZhbGlkSWQgfTsKICAgICBJbmRleGVkREI6
OkN1cnNvckRpcmVjdGlvbiBtX2N1cnNvckRpcmVjdGlvbiB7IEluZGV4ZWREQjo6Q3Vyc29yRGly
ZWN0aW9uOjpOZXh0IH07CiAgICAgSURCS2V5UmFuZ2VEYXRhIG1fa2V5UmFuZ2U7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleElu
Zm8uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JREJJbmRleElu
Zm8uaAppbmRleCA4OWFkNWFlLi42ZTg0OWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSURCSW5kZXhJbmZvLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lEQkluZGV4SW5mby5oCkBAIC01NCw2ICs1NCw5
IEBAIHB1YmxpYzoKICAgICBTdHJpbmcgbG9nZ2luZ1N0cmluZyhpbnQgaW5kZW50ID0gMCkgY29u
c3Q7CiAjZW5kaWYKIAorICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoaXMuCisg
ICAgc3RhdGljIGNvbnN0IGludDY0X3QgSW52YWxpZElkID0gLTE7CisKIHByaXZhdGU6CiAgICAg
dWludDY0X3QgbV9pZGVudGlmaWVyIHsgMCB9OwogICAgIHVpbnQ2NF90IG1fb2JqZWN0U3RvcmVJ
ZGVudGlmaWVyIHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGVlZTY2OGEuLjQ1NjA0ODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE5NDIsOCArMTk0
Miw2IEBACiAJCTUxMDMxMDVCMUJBOERCNTYwMDMzMjlDMCAvKiBJREJPcGVuREJSZXF1ZXN0SW1w
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMzEw
NTcxQkE4REIzMDAwMzMyOUMwIC8qIElEQk9wZW5EQlJlcXVlc3RJbXBsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEwMzEwNUMxQkE4REI1NjAw
MzMyOUMwIC8qIElEQlJlcXVlc3RJbXBsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDMxMDU4MUJBOERCMzAwMDMzMjlDMCAvKiBJREJSZXF1ZXN0
SW1wbC5jcHAgKi87IH07CiAJCTUxMDMxMDVEMUJBOERCNTYwMDMzMjlDMCAvKiBJREJSZXF1ZXN0
SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEw
MzEwNTkxQkE4REIzMDAwMzMyOUMwIC8qIElEQlJlcXVlc3RJbXBsLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTEwM0MyQjExQkEyMkQxQTAwRTI2
MzM3IC8qIExlZ2FjeUFueS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTY0NUI2RTFCQTBBNzYxMDBGNzg5Q0UgLyogTGVnYWN5QW55LmNwcCAqLzsg
fTsKLQkJNTEwM0MyQjkxQkEyM0EyNjAwRTI2MzM3IC8qIExlZ2FjeUFueS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCNkYxQkEwQTc2MTAwRjc4
OUNFIC8qIExlZ2FjeUFueS5oICovOyB9OwogCQk1MTA2RDdCRDE4QkRCNzZGMDAwQUIxNjYgLyog
Q29udGV4dE1lbnVDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMDZEN0JCMThCREI3NkYwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRl
eHQuY3BwICovOyB9OwogCQk1MTA2RDdCRTE4QkRCNzZGMDAwQUIxNjYgLyogQ29udGV4dE1lbnVD
b250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTA2RDdCQzE4QkRCNzZGMDAwQUIxNjYgLyogQ29udGV4dE1lbnVDb250ZXh0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTEwQTU4RTQxQkFBNDBC
MTAwQzE5MjgyIC8qIEluUHJvY2Vzc0lEQlNlcnZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBBNThFMjFCQUE0MEFFMDBDMTkyODIgLyogSW5Q
cm9jZXNzSURCU2VydmVyLmNwcCAqLzsgfTsKQEAgLTIwNDUsMjYgKzIwNDMsNiBAQAogCQk1MTYw
RjQ5ODBCMEFBNzVGMDBDMUQyQUYgLyogSGlzdG9yeUl0ZW1NYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTYwRjQ5NzBCMEFBNzVGMDBDMUQyQUYg
LyogSGlzdG9yeUl0ZW1NYWMubW0gKi87IH07CiAJCTUxNjJDN0Y0MTFGNzdFRkIwMDYxMkVGRSAv
KiBTY2hlbWVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTYyQzdGMjExRjc3RUZBMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuY3Bw
ICovOyB9OwogCQk1MTYyQzdGNTExRjc3RUZCMDA2MTJFRkUgLyogU2NoZW1lUmVnaXN0cnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjJDN0YzMTFG
NzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxNjQ1QjVBMUI5RkE2QzgwMEY3ODlDRSAvKiBM
ZWdhY3lDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE2NDVCMjgxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUN1cnNvci5jcHAgKi87IH07
Ci0JCTUxNjQ1QjVCMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjI5MUI5RjYzOTEwMEY3
ODlDRSAvKiBMZWdhY3lDdXJzb3IuaCAqLzsgfTsKLQkJNTE2NDVCNUMxQjlGQTZDODAwRjc4OUNF
IC8qIExlZ2FjeUN1cnNvcldpdGhWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIyQTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5Q3Vy
c29yV2l0aFZhbHVlLmNwcCAqLzsgfTsKLQkJNTE2NDVCNUQxQjlGQTZDODAwRjc4OUNFIC8qIExl
Z2FjeUN1cnNvcldpdGhWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTE2NDVCMkIxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUN1cnNvcldpdGhW
YWx1ZS5oICovOyB9OwotCQk1MTY0NUI1RTFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5RGF0YWJh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2
NDVCMkMxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeURhdGFiYXNlLmNwcCAqLzsgfTsKLQkJNTE2
NDVCNUYxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeURhdGFiYXNlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIyRDFCOUY2MzkxMDBGNzg5Q0Ug
LyogTGVnYWN5RGF0YWJhc2UuaCAqLzsgfTsKLQkJNTE2NDVCNjAxQjlGQTZDODAwRjc4OUNFIC8q
IExlZ2FjeUZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTE2NDVCMkUxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUZhY3RvcnkuY3BwICov
OyB9OwotCQk1MTY0NUI2MTFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5RmFjdG9yeS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMkYxQjlGNjM5
MTAwRjc4OUNFIC8qIExlZ2FjeUZhY3RvcnkuaCAqLzsgfTsKLQkJNTE2NDVCNjIxQjlGQTZDODAw
Rjc4OUNFIC8qIExlZ2FjeUluZGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjMwMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lJbmRleC5j
cHAgKi87IH07Ci0JCTUxNjQ1QjYzMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lJbmRleC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMzExQjlG
NjM5MTAwRjc4OUNFIC8qIExlZ2FjeUluZGV4LmggKi87IH07Ci0JCTUxNjQ1QjY0MUI5RkE2Qzgw
MEY3ODlDRSAvKiBMZWdhY3lPYmplY3RTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzMjFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5
T2JqZWN0U3RvcmUuY3BwICovOyB9OwotCQk1MTY0NUI2NTFCOUZBNkM4MDBGNzg5Q0UgLyogTGVn
YWN5T2JqZWN0U3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxNjQ1QjMzMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lPYmplY3RTdG9yZS5oICov
OyB9OwotCQk1MTY0NUI2NjFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5T3BlbkRCUmVxdWVzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIz
NDFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5T3BlbkRCUmVxdWVzdC5jcHAgKi87IH07Ci0JCTUx
NjQ1QjY3MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lPcGVuREJSZXF1ZXN0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzNTFCOUY2MzkxMDBG
Nzg5Q0UgLyogTGVnYWN5T3BlbkRCUmVxdWVzdC5oICovOyB9OwotCQk1MTY0NUI2ODFCOUZBNkM4
MDBGNzg5Q0UgLyogTGVnYWN5UmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzNjFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5UmVx
dWVzdC5jcHAgKi87IH07Ci0JCTUxNjQ1QjY5MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lSZXF1
ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0
NUIzNzFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5UmVxdWVzdC5oICovOyB9OwotCQk1MTY0NUI2
QTFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5VHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCMzgxQjlGNjM5MTAwRjc4OUNF
IC8qIExlZ2FjeVRyYW5zYWN0aW9uLmNwcCAqLzsgfTsKLQkJNTE2NDVCNkIxQjlGQTZDODAwRjc4
OUNFIC8qIExlZ2FjeVRyYW5zYWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzOTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5VHJhbnNh
Y3Rpb24uaCAqLzsgfTsKLQkJNTE2NDVCNkMxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeVZlcnNp
b25DaGFuZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTY0NUIzQTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5VmVyc2lvbkNoYW5nZUV2
ZW50LmNwcCAqLzsgfTsKLQkJNTE2NDVCNkQxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeVZlcnNp
b25DaGFuZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE2NDVCM0IxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeVZlcnNpb25DaGFuZ2VFdmVu
dC5oICovOyB9OwogCQk1MTY5NTM5NzEzMjlBM0M4MDBCOTJEMDQgLyogSWNvbkRhdGFiYXNlQmFz
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY5
NTM5NTEzMjlBM0M4MDBCOTJEMDQgLyogSWNvbkRhdGFiYXNlQmFzZS5jcHAgKi87IH07CiAJCTUx
Njk1Mzk4MTMyOUEzQzgwMEI5MkQwNCAvKiBJY29uRGF0YWJhc2VCYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY5NTM5NjEzMjlBM0M4MDBCOTJE
MDQgLyogSWNvbkRhdGFiYXNlQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUxNkJCNzk0MENFOTFFNjgwMDUxMkY3OSAvKiBKU1RyZWVXYWxr
ZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTE2QkI3OTIwQ0U5MUU2ODAwNTEyRjc5IC8qIEpTVHJlZVdhbGtlckN1c3RvbS5jcHAgKi87
IH07CkBAIC0yMTE3LDggKzIwOTUsNiBAQAogCQk1MTg1RkM4NTFCQjRDNEU4MDAxMjg5OEYgLyog
SURCRGF0YWJhc2VFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRDcxOTg1MTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUV4Y2Vw
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTUxODVGQzg2MUJCNEM0RTgwMDEyODk4RiAvKiBJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwMzEwNUUxQkE4
RTA5MDAwMzMyOUMwIC8qIElEQkRhdGFiYXNlSWRlbnRpZmllci5jcHAgKi87IH07CiAJCTUxODVG
Qzg3MUJCNEM0RTgwMDEyODk4RiAvKiBJREJEYXRhYmFzZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMDMxMDVGMUJBOEUwOTAwMDMz
MjlDMCAvKiBJREJEYXRhYmFzZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MTg1RkM4ODFCQjRDNEU4MDAxMjg5OEYgLyogSURC
RGF0YWJhc2VNZXRhZGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTYzMTE3QzE4NTEyNDJCMDA1MzQ2NDcgLyogSURCRGF0YWJhc2VNZXRhZGF0
YS5jcHAgKi87IH07Ci0JCTUxODVGQzg5MUJCNEM0RTgwMDEyODk4RiAvKiBJREJEYXRhYmFzZU1l
dGFkYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MUM5NjExQTE4M0QyQjgwMDBEMjAwMkUgLyogSURCRGF0YWJhc2VNZXRhZGF0YS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxODVGQzhBMUJCNEM0
RTgwMDEyODk4RiAvKiBJREJFdmVudERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5ODYxODExMDZERjAwMTZEQzUxIC8qIElE
QkV2ZW50RGlzcGF0Y2hlci5jcHAgKi87IH07CiAJCTUxODVGQzhCMUJCNEM0RTgwMDEyODk4RiAv
KiBJREJFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxRDcxOTg3MTgxMTA2REYwMDE2REM1MSAvKiBJREJFdmVudERpc3BhdGNo
ZXIuaCAqLzsgfTsKIAkJNTE4NUZDOEMxQkI0QzRFODAwMTI4OThGIC8qIElEQkZhY3RvcnkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCNDYx
QjlGODg5QjAwRjc4OUNFIC8qIElEQkZhY3RvcnkuY3BwICovOyB9OwpAQCAtMjEyNiw3ICsyMTAy
LDYgQEAKIAkJNTE4NUZDOEYxQkI0QzRFODAwMTI4OThGIC8qIElEQkdldFJlc3VsdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyM0FGMUMxODkxOEFF
NDAwMzFDREM5IC8qIElEQkdldFJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTUxODVGQzkwMUJCNEM0RTgwMDEyODk4RiAvKiBJREJJbmRl
eC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0
NUI0ODFCOUY4ODlCMDBGNzg5Q0UgLyogSURCSW5kZXguY3BwICovOyB9OwogCQk1MTg1RkM5MTFC
QjRDNEU4MDAxMjg5OEYgLyogSURCSW5kZXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjQ5MUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJJbmRleC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxODVG
QzkzMUJCNEM0RTgwMDEyODk4RiAvKiBJREJJbmRleE1ldGFkYXRhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUFCQjVCNjE4NkQwRUQxMDA4MzkxQTEg
LyogSURCSW5kZXhNZXRhZGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTUxODVGQzk0MUJCNEM0RTgwMDEyODk4RiAvKiBJREJLZXkuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFENzE5OTExODEx
MDZFMDAwMTZEQzUxIC8qIElEQktleS5jcHAgKi87IH07CiAJCTUxODVGQzk1MUJCNEM0RTgwMDEy
ODk4RiAvKiBJREJLZXkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRDcxOTkyMTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTg1RkM5NjFCQjRDNEU4MDAx
Mjg5OEYgLyogSURCS2V5RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTFFQzFBNzE4OERBRTdCMDBCQTNFQjYgLyogSURCS2V5RGF0YS5jcHAg
Ki87IH07CkBAIC0yMTM5LDE0ICsyMTE0LDExIEBACiAJCTUxODVGQzlFMUJCNEM0RTgwMDEyODk4
RiAvKiBJREJLZXlSYW5nZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxMjNBRjE3MTg5MEE0Q0EwMDMxQ0RDOSAvKiBJREJLZXlSYW5nZURhdGEu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTg1
RkM5RjFCQjRDNEU4MDAxMjg5OEYgLyogSURCT2JqZWN0U3RvcmUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCNEExQjlGODg5QjAwRjc4OUNF
IC8qIElEQk9iamVjdFN0b3JlLmNwcCAqLzsgfTsKIAkJNTE4NUZDQTAxQkI0QzRFODAwMTI4OThG
IC8qIElEQk9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MTY0NUI0QjFCOUY4ODlCMDBGNzg5Q0UgLyogSURCT2JqZWN0U3RvcmUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MTg1RkNB
MjFCQjRDNEU4MDAxMjg5OEYgLyogSURCT2JqZWN0U3RvcmVNZXRhZGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBQkI1QjcxODZEMEVEMTAwODM5
MUExIC8qIElEQk9iamVjdFN0b3JlTWV0YWRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTg1RkNBMzFCQjRDNEU4MDAxMjg5OEYgLyogSURC
T3BlbkRCUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTY0NUI0QzFCOUY4ODlCMDBGNzg5Q0UgLyogSURCT3BlbkRCUmVxdWVzdC5jcHAg
Ki87IH07CiAJCTUxODVGQ0E0MUJCNEM0RTgwMDEyODk4RiAvKiBJREJPcGVuREJSZXF1ZXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUI0RDFC
OUY4ODlCMDBGNzg5Q0UgLyogSURCT3BlbkRCUmVxdWVzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxODVGQ0E2MUJCNEM0RTgwMDEyODk4RiAv
KiBJREJPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxMkVBOUJEMTgyMDI4NTcwMDFEMDFFMCAvKiBJREJPcGVyYXRpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTg1RkNBNzFCQjRD
NEU4MDAxMjg5OEYgLyogSURCUmVjb3JkSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFQUM1QjAxODE2M0Y0RTAwNEYxQkE0IC8qIElE
QlJlY29yZElkZW50aWZpZXIuaCAqLzsgfTsKIAkJNTE4NUZDQTgxQkI0QzRFODAwMTI4OThGIC8q
IElEQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTE2NDVCNEUxQjlGODg5QjAwRjc4OUNFIC8qIElEQlJlcXVlc3QuY3BwICovOyB9Owog
CQk1MTg1RkNBOTFCQjRDNEU4MDAxMjg5OEYgLyogSURCUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCNEYxQjlGODg5QjAwRjc4OUNF
IC8qIElEQlJlcXVlc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQk1MTg1RkNBQjFCQjRDNEU4MDAxMjg5OEYgLyogSURCU2VydmVyQ29ubmVjdGlv
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwQTMy
NkUxODMxODQzMTAwM0M1MzI2IC8qIElEQlNlcnZlckNvbm5lY3Rpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTg1RkNBQzFCQjRDNEU4MDAx
Mjg5OEYgLyogSURCVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCNTAxQjlGODg5QjAwRjc4OUNFIC8qIElEQlRyYW5zYWN0
aW9uLmNwcCAqLzsgfTsKIAkJNTE4NUZDQUQxQkI0QzRFODAwMTI4OThGIC8qIElEQlRyYW5zYWN0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0
NUI1MTFCOUY4ODlCMDBGNzg5Q0UgLyogSURCVHJhbnNhY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTg1RkNBRjFCQjRDNEU4MDAxMjg5
OEYgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjUyMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJWZXJz
aW9uQ2hhbmdlRXZlbnQuY3BwICovOyB9OwpAQCAtMjI1MiwyNyArMjIyNCw2IEBACiAJCTUxRUU3
QjNBMUFBNTEyMzEwMEY5MkIyMSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRUU3QjM5MUFBNTEyMzEwMEY5MkIy
MSAvKiBSZXNvdXJjZUxvYWRJbmZvLmNwcCAqLzsgfTsKIAkJNTFFRUFBNzMxQkVGRkFCMTAwMjE4
MDA4IC8qIEluZGV4VmFsdWVFbnRyeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MUVFQUE3MTFCRUZGQTc5MDAyMTgwMDggLyogSW5kZXhWYWx1ZUVu
dHJ5LmNwcCAqLzsgfTsKIAkJNTFFRUFBNzQxQkVGRkFCMTAwMjE4MDA4IC8qIEluZGV4VmFsdWVF
bnRyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFF
RUFBNzIxQkVGRkE3OTAwMjE4MDA4IC8qIEluZGV4VmFsdWVFbnRyeS5oICovOyB9OwotCQk1MUY0
MUE2ODFCQTczQjVCMDAyRTA1M0IgLyogSURCQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0MUE0ODFCQTczQjJDMDAyRTA1M0IgLyog
SURCQ2FsbGJhY2tzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJNTFGNDFBNjkxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNDFBNDkx
QkE3M0IyQzAwMkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmQuY3BwICovOyB9OwotCQk1MUY0MUE2
QTFCQTczQjVCMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNDFBNEExQkE3M0IyQzAwMkUwNTNCIC8q
IElEQkN1cnNvckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk1MUY0MUE2QjFCQTczQjVCMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2Vu
ZE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFGNDFBNEIxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkN1cnNvckJhY2tlbmRPcGVyYXRp
b25zLmNwcCAqLzsgfTsKLQkJNTFGNDFBNkMxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkN1cnNvckJh
Y2tlbmRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MUY0MUE0QzFCQTczQjJDMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZE9wZXJh
dGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQk1MUY0MUE2RDFCQTczQjVCMDAyRTA1M0IgLyogSURCRGF0YWJhc2VCYWNrZW5kLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTREMUJBNzNC
MkMwMDJFMDUzQiAvKiBJREJEYXRhYmFzZUJhY2tlbmQuY3BwICovOyB9OwotCQk1MUY0MUE2RTFC
QTczQjVCMDAyRTA1M0IgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0MUE0RTFCQTczQjJDMDAyRTA1M0IgLyog
SURCRGF0YWJhc2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJNTFGNDFBNkYxQkE3M0I1QjAwMkUwNTNCIC8qIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
MTY0NUI0MDFCOUY2OTVFMDBGNzg5Q0UgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUY0MUE3MDFCQTcz
QjVCMDAyRTA1M0IgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNjQ1QjNFMUI5RjY5MjMwMEY3ODlD
RSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwICovOyB9OwotCQk1MUY0MUE3MTFCQTcz
QjVCMDAyRTA1M0IgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY0NUIzRjFCOUY2OTIzMDBGNzg5Q0Ug
LyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmggKi87IH07Ci0JCTUxRjQxQTcyMUJBNzNCNUIw
MDJFMDUzQiAvKiBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNDFBNEYxQkE3M0IyQzAwMkUwNTNCIC8q
IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTFGNDFBNzMxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRy
YW5zYWN0aW9uQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUY0MUE1MjFCQTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNr
ZW5kLmNwcCAqLzsgfTsKLQkJNTFGNDFBNzQxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0
aW9uQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTFGNDFBNTMxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTUxRjQxQTc1
MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjQxQTU0MUJB
NzNCMkMwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCAqLzsg
fTsKLQkJNTFGNDFBNzYxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9w
ZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxRjQxQTU1MUJBNzNCMkMwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRp
b25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
NTFGNDFBNzcxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNDFBNTYx
QkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICovOyB9Owot
CQk1MUY0MUE3ODFCQTczQjVCMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNDFBNTcx
QkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLzsgfTsKLQkJ
NTFGNDFBNzkxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlBlbmRpbmdEZWxldGVDYWxsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUY0MUE1MDFCQTczQjJD
MDAyRTA1M0IgLyogSURCUGVuZGluZ0RlbGV0ZUNhbGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1MUY0MUE3QTFCQTczQjVCMDAyRTA1M0IgLyog
SURCUGVuZGluZ09wZW5DYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUY0MUE1MTFCQTczQjJDMDAyRTA1M0IgLyogSURCUGVuZGluZ09wZW5DYWxs
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTFG
NDFBN0IxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2NDVCM0Mx
QjlGNjhDRjAwRjc4OUNFIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwICovOyB9
OwotCQk1MUY0MUE3QzFCQTczQjVCMDAyRTA1M0IgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9u
aXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2
NDVCM0QxQjlGNjhDRjAwRjc4OUNFIC8qIElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuaCAq
LzsgfTsKIAkJNTFGNzk4RTUxQkU4ODA5MjAwOEFFNDkxIC8qIElEQkN1cnNvckltcGwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNzk4RTExQkU4
ODA4NDAwOEFFNDkxIC8qIElEQkN1cnNvckltcGwuY3BwICovOyB9OwogCQk1MUY3OThFNjFCRTg4
MDkyMDA4QUU0OTEgLyogSURCQ3Vyc29ySW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGNzk4RTIxQkU4ODA4NDAwOEFFNDkxIC8qIElEQkN1cnNv
ckltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1MUY3OThFNzFCRTg4MDkyMDA4QUU0OTEgLyogSURCSW5kZXhJbXBsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjc5OEUzMUJFODgwODQwMDhB
RTQ5MSAvKiBJREJJbmRleEltcGwuY3BwICovOyB9OwpAQCAtMjgzNSwxMCArMjc4Niw4IEBACiAJ
CTdFNDc0RTFFMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNDc0RTFC
MTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3RTQ3NEUxRjEyNDk0
REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTQ3NEUxQzEyNDk0REM5MDAyMzUzNjQgLyog
U1FMaXRlRGF0YWJhc2VUcmFja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJN0U0NzRFMjAxMjQ5NERDOTAwMjM1MzY0IC8qIFNRTGl0ZURhdGFi
YXNlVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3RTQ3NEUxRDEyNDk0REM5MDAyMzUzNjQgLyogU1FMaXRlRGF0YWJhc2VUcmFja2VyLmNw
cCAqLzsgfTsKLQkJN0U0Qzk2REQxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXF1ZXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3RTRDOTZEOTFB
RDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJlcXVlc3QuaCAqLzsgfTsKIAkJN0U0Qzk2REMxQUQ0
NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNEM5NkQ4MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0Zl
dGNoUmVxdWVzdC5jcHAgKi87IH07Ci0JCThFNEM5NkREMUFENDQ4MzUwMDM2NUE1MCAvKiBKU0Zl
dGNoUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDhFNEM5NkQ5MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuaCAqLzsgfTsK
LQkJOEU0Qzk2REMxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNwb25zZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4RTRDOTZEODFBRDQ0ODM1
MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmNwcCAqLzsgfTsKKwkJN0U0Qzk2REQxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3RTRDOTZEOTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJl
cXVlc3QuaCAqLzsgfTsKIAkJN0U0REUxMEQxOThCMTBCNjAwNTFDQjAyIC8qIERpc2tDYWNoZU1v
bml0b3JDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDdFNERFMTBDMTk4QjEwQjYwMDUxQ0IwMiAvKiBEaXNrQ2FjaGVNb25pdG9yQ29jb2EubW0g
Ki87IH07CiAJCTdFNUQ3QTc2MTYxRDNGOEYwMDg5NkMzNCAvKiBPRVNFbGVtZW50SW5kZXhVaW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNUQ3
QTczMTYxRDNGOEYwMDg5NkMzNCAvKiBPRVNFbGVtZW50SW5kZXhVaW50LmNwcCAqLzsgfTsKIAkJ
N0U1RDdBNzcxNjFEM0Y4RjAwODk2QzM0IC8qIE9FU0VsZW1lbnRJbmRleFVpbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdFNUQ3QTc0MTYxRDNGOEYw
MDg5NkMzNCAvKiBPRVNFbGVtZW50SW5kZXhVaW50LmggKi87IH07CkBAIC0zNTM3LDYgKzM0ODYs
OCBAQAogCQk4QUY0RTU1QzExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBRjRFNTU5MTFE
QzVBNjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWluZy5oICovOyB9OwogCQk4QzZFQTYxOTEx
RUY3RTA0MDBGRDhFRTMgLyogUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QzZFQTYxNzExRUY3RTA0MDBGRDhF
RTMgLyogUnVudGltZUVuYWJsZWRGZWF0dXJlcy5jcHAgKi87IH07CiAJCThDNkVBNjFBMTFFRjdF
MDQwMEZEOEVFMyAvKiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QzZFQTYxODExRUY3RTA0MDBGRDhFRTMgLyog
UnVudGltZUVuYWJsZWRGZWF0dXJlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCThFNEM5NkRDMUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVz
cG9uc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OEU0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNwb25zZS5jcHAgKi87IH07CisJ
CThFNEM5NkREMUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhFNEM5NkQ5MUFENDQ4MzUwMDM2
NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuaCAqLzsgfTsKIAkJOEY2NzU2MUIxMjg4QjE3QjAwNDdB
Q0EzIC8qIEV2ZW50UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDhGNjc1NjE5MTI4OEIxN0IwMDQ3QUNBMyAvKiBFdmVudFF1ZXVlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOEZBQzc3NEQxMTk4
NzJDQjAwMTVBRTk0IC8qIEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4RjkzNEQ4NDExODlGMUVFMDA1MDhENUQg
LyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcCAqLzsgfTsKIAkJOTAwMTc3NDAxMkUwMzQ3ODAw
NjQ4NDYyIC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTAwMTc3M0QxMkUwMzQ3ODAwNjQ4NDYyIC8qIE9F
U1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwICovOyB9OwpAQCAtOTUwMiw3ICs5NDUzLDYgQEAKIAkJ
NTEwMzEwNUYxQkE4RTA5MDAwMzMyOUMwIC8qIElEQkRhdGFiYXNlSWRlbnRpZmllci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZUlkZW50aWZpZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwNkQ3QkIxOEJEQjc2RjAwMEFCMTY2IC8qIENv
bnRleHRNZW51Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDb250ZXh0TWVudUNvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTA2RDdCQzE4QkRCNzZGMDAwQUIxNjYgLyogQ29udGV4dE1lbnVDb250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRleHRNZW51Q29udGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1MTBBMzI2RTE4MzE4NDMxMDAzQzUzMjYgLyogSURCU2VydmVy
Q29ubmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJTZXJ2ZXJD
b25uZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEE1OEUyMUJBQTQw
QUUwMEMxOTI4MiAvKiBJblByb2Nlc3NJREJTZXJ2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW5Qcm9jZXNzSURCU2VydmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTEwQTU4RTMxQkFBNDBBRTAwQzE5MjgyIC8qIEluUHJvY2Vzc0lEQlNl
cnZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJblByb2Nlc3NJREJTZXJ2
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEwQTU4RUYxQkFCNzIwRjAwQzE5
MjgyIC8qIElEQlNlcnZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJREJTZXJ2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU1OSw3ICs5
NTA5LDYgQEAKIAkJNTEyREQ4RjEwRDkxRTZBRjAwMEY4OUVFIC8qIEFyY2hpdmVSZXNvdXJjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcmNoaXZlUmVzb3VyY2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTJERDhGMjBEOTFFNkFGMDAwRjg5
RUUgLyogQXJjaGl2ZVJlc291cmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEFyY2hpdmVSZXNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTJERDhG
MzBEOTFFNkFGMDAwRjg5RUUgLyogQXJjaGl2ZUZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQXJjaGl2ZUZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJNTEyRUE5QkQxODIwMjg1NzAwMUQwMUUwIC8qIElEQk9wZXJhdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJPcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTEyRjFBNzcxQzA3RUEwRDAwOTA4MjM5IC8qIElEQkdldFJlc3VsdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJHZXRSZXN1bHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTMyN0Q1RTExQTMzQTJCMDA0RjlENjUg
LyogU2lua0RvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbmtE
b2N1bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTMyN0Q1RjExQTMzQTJC
MDA0RjlENjUgLyogU2lua0RvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNpbmtEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05NjE1LDMyICs5NTY0LDYgQEAKIAkJNTE2MEY0OTcwQjBBQTc1RjAwQzFEMkFGIC8qIEhpc3Rv
cnlJdGVtTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSGlz
dG9yeUl0ZW1NYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjJDN0YyMTFG
NzdFRkEwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTY2hlbWVSZWdpc3RyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxNjJDN0YzMTFGNzdFRkIwMDYxMkVGRSAvKiBTY2hlbWVSZWdpc3RyeS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY2hlbWVSZWdpc3RyeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1MTYzMTE3QzE4NTEyNDJCMDA1MzQ2NDcgLyogSURCRGF0
YWJhc2VNZXRhZGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
REJEYXRhYmFzZU1ldGFkYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE2
NDVCMjgxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUN1cnNvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lDdXJzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MTY0NUIyOTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2FjeUN1cnNvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk1MTY0NUIyQTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5
Q3Vyc29yV2l0aFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IExlZ2FjeUN1cnNvcldpdGhWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTUxNjQ1QjJCMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lDdXJzb3JXaXRoVmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjQ1QjJDMUI5RjYzOTEwMEY3ODlDRSAvKiBM
ZWdhY3lEYXRhYmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBM
ZWdhY3lEYXRhYmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjQ1QjJE
MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lEYXRhYmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMZWdhY3lEYXRhYmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1MTY0NUIyRTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5RmFjdG9yeS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lGYWN0b3J5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE2NDVCMkYxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2Fj
eUZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5RmFjdG9y
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTY0NUIzMDFCOUY2MzkxMDBGNzg5
Q0UgLyogTGVnYWN5SW5kZXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gTGVnYWN5SW5kZXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTY0NUIz
MTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5SW5kZXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTGVnYWN5SW5kZXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NTE2NDVCMzIxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeU9iamVjdFN0b3JlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeU9iamVjdFN0b3JlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE2NDVCMzMxQjlGNjM5MTAwRjc4OUNFIC8qIExl
Z2FjeU9iamVjdFN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2Fj
eU9iamVjdFN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjQ1QjM0MUI5
RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lPcGVuREJSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeU9wZW5EQlJlcXVlc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1MTY0NUIzNTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5T3Bl
bkRCUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lPcGVu
REJSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjQ1QjM2MUI5RjYz
OTEwMEY3ODlDRSAvKiBMZWdhY3lSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IExlZ2FjeVJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1MTY0NUIzNzFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5UmVxdWVzdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMZWdhY3lSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTUxNjQ1QjM4MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lUcmFuc2Fj
dGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMZWdhY3lUcmFu
c2FjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjQ1QjM5MUI5RjYz
OTEwMEY3ODlDRSAvKiBMZWdhY3lUcmFuc2FjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBMZWdhY3lUcmFuc2FjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1MTY0NUIzQTFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeVZlcnNpb25D
aGFuZ2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjQ1QjNCMUI5
RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5VmVyc2lvbkNoYW5nZUV2ZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjQ1QjNDMUI5RjY4Q0YwMEY3ODlDRSAvKiBJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElEQlBlbmRpbmdUcmFuc2FjdGlvbk1vbml0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MTY0NUIzRDFCOUY2OENGMDBGNzg5Q0UgLyogSURCUGVuZGluZ1RyYW5z
YWN0aW9uTW9uaXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUx
NjQ1QjNFMUI5RjY5MjMwMEY3ODlDRSAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCRGF0YWJhc2VDYWxsYmFja3NJ
bXBsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE2NDVCM0YxQjlGNjkyMzAw
Rjc4OUNFIC8qIElEQkRhdGFiYXNlQ2FsbGJhY2tzSW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTE2NDVCNDAxQjlGNjk1RTAwRjc4OUNFIC8qIElEQkRhdGFiYXNlQ2Fs
bGJhY2tzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlQ2Fs
bGJhY2tzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjQ1QjQxMUI5Rjg4OUIw
MEY3ODlDRSAvKiBJREJDdXJzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SURCQ3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjQ1QjQyMUI5Rjg4
OUIwMEY3ODlDRSAvKiBJREJDdXJzb3JXaXRoVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSURCQ3Vyc29yV2l0aFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTE2NDVCNDMxQjlGODg5QjAwRjc4OUNFIC8qIElEQkN1cnNvcldpdGhW
YWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJDdXJzb3JXaXRoVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2NjEsOCArOTU4NCw2IEBACiAJ
CTUxNjQ1QjUyMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTE2NDVCNTMxQjlGODg5QjAwRjc4
OUNFIC8qIElEQlZlcnNpb25DaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJREJWZXJzaW9uQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTE2NDVCNTQxQjlGODhFODAwRjc4OUNFIC8qIElEQkN1cnNvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MTY0NUI2RTFCQTBBNzYxMDBGNzg5Q0UgLyogTGVnYWN5QW55LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExlZ2FjeUFueS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxNjQ1QjZGMUJBMEE3NjEwMEY3ODlDRSAvKiBM
ZWdhY3lBbnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGVnYWN5QW55Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxNjk1Mzk1MTMyOUEzQzgwMEI5MkQwNCAv
KiBJY29uRGF0YWJhc2VCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEljb25EYXRhYmFzZUJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTY5NTM5NjEzMjlBM0M4MDBCOTJEMDQgLyogSWNvbkRhdGFiYXNlQmFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJY29uRGF0YWJhc2VCYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxNkJCNzkyMENFOTFFNjgwMDUxMkY3OSAvKiBKU1RyZWVXYWxrZXJD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNUcmVlV2Fs
a2VyQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3NTUsOCArOTY3
Niw2IEBACiAJCTUxQUJBRTFBMTAzQzE4RkYwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1FcnJvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTb2NrZXRTdHJlYW1FcnJvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFCQUUxQzEwM0MxOTEzMDA4QzUyNjAgLyog
U29ja2V0U3RyZWFtSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNv
Y2tldFN0cmVhbUhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUFCQUUx
RDEwM0MxOTEzMDA4QzUyNjAgLyogU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUFCQjVCNjE4NkQwRUQxMDA4MzkxQTEg
LyogSURCSW5kZXhNZXRhZGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
REJJbmRleE1ldGFkYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxQUJCNUI3
MTg2RDBFRDEwMDgzOTFBMSAvKiBJREJPYmplY3RTdG9yZU1ldGFkYXRhLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQk9iamVjdFN0b3JlTWV0YWRhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBQkY2NEMxNjM5MkUyODAwMTMyQTdBIC8qIExvYWRlclN0
cmF0ZWd5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvYWRlclN0
cmF0ZWd5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFBRjUwMzUxNkYxMDBG
NjAwOTVCMkU4IC8qIFJlc291cmNlTG9hZGVyVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVzb3VyY2VMb2FkZXJUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MUIyNDE3QTBEOTMxRjNGMDBFODNGNUMgLyogTGVnYWN5V2ViQXJjaGl2ZU1hYy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IExlZ2FjeVdlYkFyY2hp
dmVNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NzczLDcgKzk2OTIsNiBA
QAogCQk1MUMwQUE0MDBGMkFBMTVFMDAxNjQ4QzIgLyogQ2FjaGVkRnJhbWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IENhY2hlZEZyYW1l
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVu
dGlmaWVyID0geGNvZGUubGFuZy5jcHA7IH07CiAJCTUxQzgxQjg3MEM0NDIyRjcwMDE5RUNFMyAv
KiBGVFBEaXJlY3RvcnlQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEZUUERpcmVjdG9yeVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxQzgxQjg4MEM0NDIyRjcwMDE5RUNFMyAvKiBGVFBEaXJlY3RvcnlQYXJzZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZUUERpcmVjdG9yeVBhcnNlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUM5NjExQTE4M0QyQjgwMDBEMjAwMkUgLyogSURC
RGF0YWJhc2VNZXRhZGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJE
YXRhYmFzZU1ldGFkYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQ0JGQzk4
MEQxMEU0ODMwMDJEQkY1MSAvKiBDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQwQzUxNTBEQUE5MEI3MDAzQjM4MzEgLyogSlNTdG9y
YWdlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3Rv
cmFnZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDcxOTZDMTgx
MTA2REYwMDE2REM1MSAvKiBET01XaW5kb3dJbmRleGVkRGF0YWJhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRE9NV2luZG93SW5kZXhlZERhdGFiYXNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4NDQsMjIgKzk3NjIsNiBAQAogCQk1MUVF
N0IzOTFBQTUxMjMxMDBGOTJCMjEgLyogUmVzb3VyY2VMb2FkSW5mby5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZXNvdXJjZUxvYWRJbmZvLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFFRUFBNzExQkVGRkE3OTAwMjE4MDA4IC8qIEluZGV4VmFs
dWVFbnRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmRleFZh
bHVlRW50cnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUVFQUE3MjFCRUZG
QTc5MDAyMTgwMDggLyogSW5kZXhWYWx1ZUVudHJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEluZGV4VmFsdWVFbnRyeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MUY0MUE0ODFCQTczQjJDMDAyRTA1M0IgLyogSURCQ2FsbGJhY2tzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkNhbGxiYWNrcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MUY0MUE0OTFCQTczQjJDMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJDdXJzb3JCYWNrZW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFGNDFBNEExQkE3M0IyQzAwMkUw
NTNCIC8qIElEQkN1cnNvckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSURCQ3Vyc29yQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUY0
MUE0QjFCQTczQjJDMDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCQ3Vyc29yQmFja2VuZE9wZXJh
dGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUY0MUE0QzFCQTczQjJD
MDAyRTA1M0IgLyogSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSURCQ3Vyc29yQmFja2VuZE9wZXJhdGlvbnMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFGNDFBNEQxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkRhdGFi
YXNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJREJE
YXRhYmFzZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUY0MUE0
RTFCQTczQjJDMDAyRTA1M0IgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElEQkRhdGFiYXNlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk1MUY0MUE0RjFCQTczQjJDMDAyRTA1M0IgLyogSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFGNDFB
NTAxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlBlbmRpbmdEZWxldGVDYWxsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlBlbmRpbmdEZWxldGVDYWxsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUxRjQxQTUxMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJQZW5kaW5n
T3BlbkNhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCUGVuZGluZ09w
ZW5DYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRjQxQTUyMUJBNzNCMkMw
MDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNTFGNDFBNTMxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0
aW9uQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFGNDFBNTQxQkE3
M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kT3Bl
cmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRjQxQTU1MUJBNzNC
MkMwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFGNDFBNTYxQkE3M0IyQzAwMkUwNTNC
IC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTUxRjQxQTU3MUJBNzNCMkMwMDJFMDUzQiAvKiBJREJUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFG
NkEzRDUwNjYzQkYwNDAwNEQyOTE5IC8qIEhUTUxDYW52YXNFbGVtZW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhUTUxDYW52YXNF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCTUxRjZBM0Q2MDY2M0JGMDQwMDREMjkxOSAvKiBIVE1MQ2FudmFzRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRl
bnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBI
VE1MQ2FudmFzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKIAkJNTFGNzk4RTExQkU4ODA4NDAwOEFFNDkxIC8qIElEQkN1cnNv
ckltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSURCQ3Vyc29y
SW1wbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDQ5NSw4ICsxMDM5Nyw2
IEBACiAJCTdFNDc0RTFEMTI0OTREQzkwMDIzNTM2NCAvKiBTUUxpdGVEYXRhYmFzZVRyYWNrZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FMaXRlRGF0YWJhc2VU
cmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U0Qzk2RDgxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTRmV0Y2hSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJN0U0Qzk2RDkxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXF1ZXN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmV0Y2hSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCThFNEM5NkQ4MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVz
cG9uc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGZXRjaFJl
c3BvbnNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEU0Qzk2RDkxQUQ0NDgz
NTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0ZldGNoUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0U0REUxMEMxOThCMTBCNjAwNTFDQjAyIC8qIERpc2tDYWNoZU1vbml0b3JDb2NvYS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERpc2tDYWNoZU1vbml0b3JDb2Nv
YS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0U1RDdBNzMxNjFEM0Y4RjAwODk2
QzM0IC8qIE9FU0VsZW1lbnRJbmRleFVpbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT0VTRWxlbWVudEluZGV4VWludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTdFNUQ3QTc0MTYxRDNGOEYwMDg5NkMzNCAvKiBPRVNFbGVtZW50SW5kZXhVaW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9FU0VsZW1lbnRJbmRleFVpbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMTc3LDYgKzExMDc3LDggQEAKIAkJ
OEFGNEU1NUExMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBQZXJmb3JtYW5jZVRpbWluZy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCThDNkVBNjE3MTFFRjdFMDQwMEZEOEVFMyAvKiBSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXMuY3BwOyBwYXRoID0gZ2VuZXJpYy9SdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEM2RUE2MTgxMUVGN0UwNDAwRkQ4
RUUzIC8qIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOyBwYXRoID0gZ2VuZXJpYy9SdW50aW1l
RW5hYmxlZEZlYXR1cmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCThFNEM5NkQ4
MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNGZXRjaFJlc3BvbnNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOEU0Qzk2RDkxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTRmV0Y2hSZXNwb25z
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ZldGNoUmVzcG9uc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0EzIC8q
IEV2ZW50UXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRRdWV1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RjkzNEQ4MzExODlGMUVFMDA1MDhE
NUQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTTWFpblRocmVhZEV4ZWNTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk4RjkzNEQ4NDExODlGMUVFMDA1MDhENUQgLyogSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWFpblRocmVhZEV4ZWNT
dGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNzM5Myw1NiArMTcyOTUs
NiBAQAogCQkJcGF0aCA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0J
CTUxNjQ1QjI3MUI5RjYzN0UwMEY3ODlDRSAvKiBsZWdhY3kgKi8gPSB7Ci0JCQlpc2EgPSBQQlhH
cm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTUxRjQxQTQ4MUJBNzNCMkMwMDJFMDUzQiAvKiBJ
REJDYWxsYmFja3MuaCAqLywKLQkJCQk1MUY0MUE0OTFCQTczQjJDMDAyRTA1M0IgLyogSURCQ3Vy
c29yQmFja2VuZC5jcHAgKi8sCi0JCQkJNTFGNDFBNEExQkE3M0IyQzAwMkUwNTNCIC8qIElEQkN1
cnNvckJhY2tlbmQuaCAqLywKLQkJCQk1MUY0MUE0QjFCQTczQjJDMDAyRTA1M0IgLyogSURCQ3Vy
c29yQmFja2VuZE9wZXJhdGlvbnMuY3BwICovLAotCQkJCTUxRjQxQTRDMUJBNzNCMkMwMDJFMDUz
QiAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oICovLAotCQkJCTUxRjQxQTREMUJBNzNC
MkMwMDJFMDUzQiAvKiBJREJEYXRhYmFzZUJhY2tlbmQuY3BwICovLAotCQkJCTUxRjQxQTRFMUJB
NzNCMkMwMDJFMDUzQiAvKiBJREJEYXRhYmFzZUJhY2tlbmQuaCAqLywKLQkJCQk1MTY0NUI0MDFC
OUY2OTVFMDBGNzg5Q0UgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCAqLywKLQkJCQk1MTY0NUIz
RTFCOUY2OTIzMDBGNzg5Q0UgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmNwcCAqLywKLQkJ
CQk1MTY0NUIzRjFCOUY2OTIzMDBGNzg5Q0UgLyogSURCRGF0YWJhc2VDYWxsYmFja3NJbXBsLmgg
Ki8sCi0JCQkJNTFGNDFBNEYxQkE3M0IyQzAwMkUwNTNCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmggKi8sCi0JCQkJNTFGNDFBNTAxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlBlbmRpbmdE
ZWxldGVDYWxsLmggKi8sCi0JCQkJNTFGNDFBNTExQkE3M0IyQzAwMkUwNTNCIC8qIElEQlBlbmRp
bmdPcGVuQ2FsbC5oICovLAotCQkJCTUxNjQ1QjNDMUI5RjY4Q0YwMEY3ODlDRSAvKiBJREJQZW5k
aW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNwcCAqLywKLQkJCQk1MTY0NUIzRDFCOUY2OENGMDBGNzg5
Q0UgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oICovLAotCQkJCTUxRjQxQTUyMUJB
NzNCMkMwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwICovLAotCQkJCTUxRjQx
QTUzMUJBNzNCMkMwMDJFMDUzQiAvKiBJREJUcmFuc2FjdGlvbkJhY2tlbmQuaCAqLywKLQkJCQk1
MUY0MUE1NDFCQTczQjJDMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9u
cy5jcHAgKi8sCi0JCQkJNTFGNDFBNTUxQkE3M0IyQzAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9u
QmFja2VuZE9wZXJhdGlvbnMuaCAqLywKLQkJCQk1MUY0MUE1NjFCQTczQjJDMDAyRTA1M0IgLyog
SURCVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8sCi0JCQkJNTFGNDFBNTcxQkE3M0IyQzAw
MkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKLQkJCQk1MTY0NUI2RTFC
QTBBNzYxMDBGNzg5Q0UgLyogTGVnYWN5QW55LmNwcCAqLywKLQkJCQk1MTY0NUI2RjFCQTBBNzYx
MDBGNzg5Q0UgLyogTGVnYWN5QW55LmggKi8sCi0JCQkJNTE2NDVCMjgxQjlGNjM5MTAwRjc4OUNF
IC8qIExlZ2FjeUN1cnNvci5jcHAgKi8sCi0JCQkJNTE2NDVCMjkxQjlGNjM5MTAwRjc4OUNFIC8q
IExlZ2FjeUN1cnNvci5oICovLAotCQkJCTUxNjQ1QjJBMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdh
Y3lDdXJzb3JXaXRoVmFsdWUuY3BwICovLAotCQkJCTUxNjQ1QjJCMUI5RjYzOTEwMEY3ODlDRSAv
KiBMZWdhY3lDdXJzb3JXaXRoVmFsdWUuaCAqLywKLQkJCQk1MTY0NUIyQzFCOUY2MzkxMDBGNzg5
Q0UgLyogTGVnYWN5RGF0YWJhc2UuY3BwICovLAotCQkJCTUxNjQ1QjJEMUI5RjYzOTEwMEY3ODlD
RSAvKiBMZWdhY3lEYXRhYmFzZS5oICovLAotCQkJCTUxNjQ1QjJFMUI5RjYzOTEwMEY3ODlDRSAv
KiBMZWdhY3lGYWN0b3J5LmNwcCAqLywKLQkJCQk1MTY0NUIyRjFCOUY2MzkxMDBGNzg5Q0UgLyog
TGVnYWN5RmFjdG9yeS5oICovLAotCQkJCTUxNjQ1QjMwMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdh
Y3lJbmRleC5jcHAgKi8sCi0JCQkJNTE2NDVCMzExQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeUlu
ZGV4LmggKi8sCi0JCQkJNTE2NDVCMzIxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeU9iamVjdFN0
b3JlLmNwcCAqLywKLQkJCQk1MTY0NUIzMzFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5T2JqZWN0
U3RvcmUuaCAqLywKLQkJCQk1MTY0NUIzNDFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5T3BlbkRC
UmVxdWVzdC5jcHAgKi8sCi0JCQkJNTE2NDVCMzUxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeU9w
ZW5EQlJlcXVlc3QuaCAqLywKLQkJCQk1MTY0NUIzNjFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5
UmVxdWVzdC5jcHAgKi8sCi0JCQkJNTE2NDVCMzcxQjlGNjM5MTAwRjc4OUNFIC8qIExlZ2FjeVJl
cXVlc3QuaCAqLywKLQkJCQk1MTY0NUIzODFCOUY2MzkxMDBGNzg5Q0UgLyogTGVnYWN5VHJhbnNh
Y3Rpb24uY3BwICovLAotCQkJCTUxNjQ1QjM5MUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lUcmFu
c2FjdGlvbi5oICovLAotCQkJCTUxNjQ1QjNBMUI5RjYzOTEwMEY3ODlDRSAvKiBMZWdhY3lWZXJz
aW9uQ2hhbmdlRXZlbnQuY3BwICovLAotCQkJCTUxNjQ1QjNCMUI5RjYzOTEwMEY3ODlDRSAvKiBM
ZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gbGVnYWN5Owot
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJNTE3NDFEMDgwQjA3MjU3MDAwRUQ0
NDJDIC8qIGhpc3RvcnkgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KApAQCAtMTk2MTksNyArMTk0NzEsNiBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKIAkJCQk1MTAzMTA0MjFCQThDNjRDMDAzMzI5QzAgLyogY2xpZW50ICovLAotCQkJCTUx
NjQ1QjI3MUI5RjYzN0UwMEY3ODlDRSAvKiBsZWdhY3kgKi8sCiAJCQkJNTEwQTU4RUUxQkFCNzFF
MDAwQzE5MjgyIC8qIHNlcnZlciAqLywKIAkJCQk1MTBBNThFMTFCQUE0MDk4MDBDMTkyODIgLyog
c2hhcmVkICovLAogCQkJCTUxRDcxOTZDMTgxMTA2REYwMDE2REM1MSAvKiBET01XaW5kb3dJbmRl
eGVkRGF0YWJhc2UuY3BwICovLApAQCAtMTk2NDIsOCArMTk0OTMsNiBAQAogCQkJCTUxRDcxOTg1
MTgxMTA2REYwMDE2REM1MSAvKiBJREJEYXRhYmFzZUV4Y2VwdGlvbi5oICovLAogCQkJCTUxMDMx
MDVFMUJBOEUwOTAwMDMzMjlDMCAvKiBJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwICovLAogCQkJ
CTUxMDMxMDVGMUJBOEUwOTAwMDMzMjlDMCAvKiBJREJEYXRhYmFzZUlkZW50aWZpZXIuaCAqLywK
LQkJCQk1MTYzMTE3QzE4NTEyNDJCMDA1MzQ2NDcgLyogSURCRGF0YWJhc2VNZXRhZGF0YS5jcHAg
Ki8sCi0JCQkJNTFDOTYxMUExODNEMkI4MDAwRDIwMDJFIC8qIElEQkRhdGFiYXNlTWV0YWRhdGEu
aCAqLywKIAkJCQk1MUQ3MTk4NjE4MTEwNkRGMDAxNkRDNTEgLyogSURCRXZlbnREaXNwYXRjaGVy
LmNwcCAqLywKIAkJCQk1MUQ3MTk4NzE4MTEwNkRGMDAxNkRDNTEgLyogSURCRXZlbnREaXNwYXRj
aGVyLmggKi8sCiAJCQkJNTE2NDVCNDYxQjlGODg5QjAwRjc4OUNFIC8qIElEQkZhY3RvcnkuY3Bw
ICovLApAQCAtMTk2NTQsNyArMTk1MDMsNiBAQAogCQkJCTUxNjQ1QjQ4MUI5Rjg4OUIwMEY3ODlD
RSAvKiBJREJJbmRleC5jcHAgKi8sCiAJCQkJNTE2NDVCNDkxQjlGODg5QjAwRjc4OUNFIC8qIElE
QkluZGV4LmggKi8sCiAJCQkJNTFENzE5OTAxODExMDZFMDAwMTZEQzUxIC8qIElEQkluZGV4Lmlk
bCAqLywKLQkJCQk1MUFCQjVCNjE4NkQwRUQxMDA4MzkxQTEgLyogSURCSW5kZXhNZXRhZGF0YS5o
ICovLAogCQkJCTUxRDcxOTkxMTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXkuY3BwICovLAogCQkJ
CTUxRDcxOTkyMTgxMTA2RTAwMDE2REM1MSAvKiBJREJLZXkuaCAqLywKIAkJCQk1MTFFQzFBNzE4
OERBRTdCMDBCQTNFQjYgLyogSURCS2V5RGF0YS5jcHAgKi8sCkBAIC0xOTY2OSwxOCArMTk1MTcs
MTUgQEAKIAkJCQk1MTY0NUI0QTFCOUY4ODlCMDBGNzg5Q0UgLyogSURCT2JqZWN0U3RvcmUuY3Bw
ICovLAogCQkJCTUxNjQ1QjRCMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJPYmplY3RTdG9yZS5oICov
LAogCQkJCTUxRDcxOTlCMTgxMTA2RTAwMDE2REM1MSAvKiBJREJPYmplY3RTdG9yZS5pZGwgKi8s
Ci0JCQkJNTFBQkI1QjcxODZEMEVEMTAwODM5MUExIC8qIElEQk9iamVjdFN0b3JlTWV0YWRhdGEu
aCAqLywKIAkJCQk1MTY0NUI0QzFCOUY4ODlCMDBGNzg5Q0UgLyogSURCT3BlbkRCUmVxdWVzdC5j
cHAgKi8sCiAJCQkJNTE2NDVCNEQxQjlGODg5QjAwRjc4OUNFIC8qIElEQk9wZW5EQlJlcXVlc3Qu
aCAqLywKIAkJCQk1MUQ3MTk5RTE4MTEwNkUwMDAxNkRDNTEgLyogSURCT3BlbkRCUmVxdWVzdC5p
ZGwgKi8sCi0JCQkJNTEyRUE5QkQxODIwMjg1NzAwMUQwMUUwIC8qIElEQk9wZXJhdGlvbi5oICov
LAogCQkJCTUxRUFDNUIwMTgxNjNGNEUwMDRGMUJBNCAvKiBJREJSZWNvcmRJZGVudGlmaWVyLmgg
Ki8sCiAJCQkJNTE2NDVCNEUxQjlGODg5QjAwRjc4OUNFIC8qIElEQlJlcXVlc3QuY3BwICovLAog
CQkJCTUxNjQ1QjRGMUI5Rjg4OUIwMEY3ODlDRSAvKiBJREJSZXF1ZXN0LmggKi8sCiAJCQkJNTFE
NzE5QTMxODExMDZFMDAwMTZEQzUxIC8qIElEQlJlcXVlc3QuaWRsICovLAogCQkJCTUxNDEyOTk2
MUM2OTc2MTUwMDU5RTcxNCAvKiBJREJSZXF1ZXN0Q29tcGxldGlvbkV2ZW50LmNwcCAqLywKIAkJ
CQk1MTQxMjk5NzFDNjk3NjE1MDA1OUU3MTQgLyogSURCUmVxdWVzdENvbXBsZXRpb25FdmVudC5o
ICovLAotCQkJCTUxMEEzMjZFMTgzMTg0MzEwMDNDNTMyNiAvKiBJREJTZXJ2ZXJDb25uZWN0aW9u
LmggKi8sCiAJCQkJNTE2NDVCNTAxQjlGODg5QjAwRjc4OUNFIC8qIElEQlRyYW5zYWN0aW9uLmNw
cCAqLywKIAkJCQk1MTY0NUI1MTFCOUY4ODlCMDBGNzg5Q0UgLyogSURCVHJhbnNhY3Rpb24uaCAq
LywKIAkJCQk1MUQ3MTlBNjE4MTEwNkUwMDAxNkRDNTEgLyogSURCVHJhbnNhY3Rpb24uaWRsICov
LApAQCAtMjYzMTgsMzggKzI2MTYzLDI5IEBACiAJCQkJNTE5OEY3QkYxQkMzMzhBRjAwRTJDQzVG
IC8qIElEQkFueUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQkE0QUNDMUJCQzVCREQwMERG
M0Q2RCAvKiBJREJCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1ODVBNjYzMTFE
NEZBQzUwMDRDM0U0QiAvKiBJREJCaW5kaW5nVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1MUY0MUE2ODFCQTczQjVCMDAyRTA1M0IgLyogSURCQ2FsbGJhY2tzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTg1RkNCOTFCQjRDQkY4MDAxMjg5OEYgLyogSURCQ29ubmVjdGlvblRvQ2xpZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTZEN0Q3MjFCQjVGMEJEMDBBRjdDNzcgLyogSURCQ29u
bmVjdGlvblRvQ2xpZW50RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxOThGN0MxMUJD
NDg1NjcwMEUyQ0M1RiAvKiBJREJDb25uZWN0aW9uVG9TZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxNkQ3RDcwMUJCNUYwQkQwMEFGN0M3NyAvKiBJREJDb25uZWN0aW9uVG9TZXJ2ZXJEZWxl
Z2F0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDN0IxQkI0QzRFODAwMTI4OThGIC8qIElE
QkN1cnNvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFGNDFBNkExQkE3M0I1QjAwMkUwNTNCIC8q
IElEQkN1cnNvckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxRjQxQTZDMUJBNzNCNUIw
MDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTFGNzk4RTYxQkU4ODA5MjAwOEFFNDkxIC8qIElEQkN1cnNvckltcGwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxNzEzOEZDMUJGM0FERjQwMDBENUYwMSAvKiBJREJDdXJzb3JJbmZvLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTg1RkM3RTFCQjRDNEU4MDAxMjg5OEYgLyogSURCQ3Vyc29yV2l0
aFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUY3OThGNDFCRTg4Mzk0MDA4QUU0OTEgLyog
SURCQ3Vyc29yV2l0aFZhbHVlSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDODExQkI0
QzRFODAwMTI4OThGIC8qIElEQkRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUY0MUE2
RTFCQTczQjVCMDAyRTA1M0IgLyogSURCRGF0YWJhc2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywK
LQkJCQk1MUY0MUE2RjFCQTczQjVCMDAyRTA1M0IgLyogSURCRGF0YWJhc2VDYWxsYmFja3MuaCBp
biBIZWFkZXJzICovLAotCQkJCTUxRjQxQTcxMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJEYXRhYmFz
ZUNhbGxiYWNrc0ltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQzgzMUJCNEM0RTgwMDEy
ODk4RiAvKiBJREJEYXRhYmFzZUVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM4NTFC
QjRDNEU4MDAxMjg5OEYgLyogSURCRGF0YWJhc2VFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTUxODVGQzg3MUJCNEM0RTgwMDEyODk4RiAvKiBJREJEYXRhYmFzZUlkZW50aWZpZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxOThGN0IxMUJCREY1QzgwMEUyQ0M1RiAvKiBJREJEYXRhYmFz
ZUltcGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQkE0QUM0MUJCQjVDRDgwMERGM0Q2RCAvKiBJ
REJEYXRhYmFzZUluZm8uaCBpbiBIZWFkZXJzICovLAotCQkJCTUxODVGQzg5MUJCNEM0RTgwMDEy
ODk4RiAvKiBJREJEYXRhYmFzZU1ldGFkYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTQ4NDUz
RjFCQjlEMDdFMDA2QTcyRUQgLyogSURCRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVG
QzhCMUJCNEM0RTgwMDEyODk4RiAvKiBJREJFdmVudERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxODVGQzhEMUJCNEM0RTgwMDEyODk4RiAvKiBJREJGYWN0b3J5LmggaW4gSGVhZGVy
cyAqLywKLQkJCQk1MUY0MUE3MjFCQTczQjVCMDAyRTA1M0IgLyogSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDMxMDUwMUJBOENDMDMwMDMzMjlDMCAv
KiBJREJGYWN0b3J5SW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDOEYxQkI0QzRFODAw
MTI4OThGIC8qIElEQkdldFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDOTExQkI0
QzRFODAwMTI4OThGIC8qIElEQkluZGV4LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUY3OThFODFC
RTg4MDkyMDA4QUU0OTEgLyogSURCSW5kZXhJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MUY3
OThGMDFCRTg4MEU3MDA4QUU0OTEgLyogSURCSW5kZXhJbmZvLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk1MTg1RkM5MzFCQjRDNEU4MDAxMjg5OEYgLyogSURCSW5kZXhNZXRhZGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE4NUZDOTUxQkI0QzRFODAwMTI4OThGIC8qIElEQktleS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTE4NUZDOTcxQkI0QzRFODAwMTI4OThGIC8qIElEQktleURhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxODVGQzk5MUJCNEM0RTgwMDEyODk4RiAvKiBJREJLZXlQYXRoLmgg
aW4gSGVhZGVycyAqLywKQEAgLTI2MzU5LDEzICsyNjE5NSw4IEBACiAJCQkJNTE4NUZDQTAxQkI0
QzRFODAwMTI4OThGIC8qIElEQk9iamVjdFN0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTYw
NzEzMTFCRDgzMDg2MDBEQkM0RjIgLyogSURCT2JqZWN0U3RvcmVJbXBsLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTYwNzEyRjFCRDgzMDc4MDBEQkM0RjIgLyogSURCT2JqZWN0U3RvcmVJbmZvLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk1MTg1RkNBMjFCQjRDNEU4MDAxMjg5OEYgLyogSURCT2JqZWN0
U3RvcmVNZXRhZGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDQTQxQkI0QzRFODAwMTI4
OThGIC8qIElEQk9wZW5EQlJlcXVlc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDMxMDVCMUJB
OERCNTYwMDMzMjlDMCAvKiBJREJPcGVuREJSZXF1ZXN0SW1wbC5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNTE4NUZDQTYxQkI0QzRFODAwMTI4OThGIC8qIElEQk9wZXJhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNTFGNDFBNzkxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlBlbmRpbmdEZWxldGVDYWxs
LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUY0MUE3QTFCQTczQjVCMDAyRTA1M0IgLyogSURCUGVu
ZGluZ09wZW5DYWxsLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUY0MUE3QzFCQTczQjVCMDAyRTA1
M0IgLyogSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTE4NUZDQTcxQkI0QzRFODAwMTI4OThGIC8qIElEQlJlY29yZElkZW50aWZpZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxODVGQ0E5MUJCNEM0RTgwMDEyODk4RiAvKiBJREJSZXF1ZXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTBBNThGQTFCQUNDN0YyMDBDMTkyODIgLyogSURCUmVxdWVzdERh
dGEuaCBpbiBIZWFkZXJzICovLApAQCAtMjYzNzMsMTEgKzI2MjA0LDcgQEAKIAkJCQk1MTQ1QjEw
QTFCQzQ4RTJFMDBFODYyMTkgLyogSURCUmVzb3VyY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MUQ3MjM2RDFCQjYxNzQ5MDA0NzhDQTMgLyogSURCUmVzdWx0RGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE4NUZDQkIxQkI0Q0JGODAwMTI4OThGIC8qIElEQlNlcnZlci5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNTE4NUZDQUIxQkI0QzRFODAwMTI4OThGIC8qIElEQlNlcnZlckNv
bm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUxODVGQ0FEMUJCNEM0RTgwMDEyODk4RiAv
KiBJREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFGNDFBNzQxQkE3M0I1QjAw
MkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFG
NDFBNzYxQkE3M0I1QjAwMkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLAotCQkJCTUxRjQxQTc4MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTk4RjdCNTFCQkUwMDND
MDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTk4
RjdBRDFCQkREM0VCMDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTg1RkNCMDFCQjRDNEU4MDAxMjg5OEYgLyogSURCVmVyc2lvbkNoYW5nZUV2ZW50
LmggaW4gSGVhZGVycyAqLywKQEAgLTI3MTA3LDIyICsyNjkzNCwxMSBAQAogCQkJCTE0MURDMDU0
MTY0ODM0QjkwMDM3MUU1QSAvKiBMYXlvdXRTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDkw
NjYwNzBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0MURDMDQ4MTY0ODM0OEYwMDM3MUU1QSAvKiBMYXlvdXRVbml0LmggaW4gSGVhZGVycyAqLywK
LQkJCQk1MTAzQzJCOTFCQTIzQTI2MDBFMjYzMzcgLyogTGVnYWN5QW55LmggaW4gSGVhZGVycyAq
LywKLQkJCQk1MTY0NUI1QjFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk1MTY0NUI1RDFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yV2l0
aFZhbHVlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTY0NUI1RjFCOUZBNkM4MDBGNzg5Q0UgLyog
TGVnYWN5RGF0YWJhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNjQ1QjYxMUI5RkE2QzgwMEY3
ODlDRSAvKiBMZWdhY3lGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTY0NUI2MzFCOUZB
NkM4MDBGNzg5Q0UgLyogTGVnYWN5SW5kZXguaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNjQ1QjY1
MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lPYmplY3RTdG9yZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNTE2NDVCNjcxQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeU9wZW5EQlJlcXVlc3QuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTUxNjQ1QjY5MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lSZXF1ZXN0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEMzQjFGQTBGMEU0MTYxMDA5NjkzRjYgLyogTGVnYWN5
VGlsZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEI2NUE1ODEzMkZBOEU3MDA3MEU3QkUg
LyogTGVnYWN5VGlsZUdyaWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0MjRBMzlFMTMzMERGMDEw
MENGNkRDOSAvKiBMZWdhY3lUaWxlR3JpZFRpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0QjY1
QTVDMTMyRkFDQjAwMDcwRTdCRSAvKiBMZWdhY3lUaWxlTGF5ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUU0RTM5QUZCMTMzMEVGQTgwMDNBQjI3NCAvKiBMZWdhY3lUaWxlTGF5ZXJQb29sLmggaW4g
SGVhZGVycyAqLywKLQkJCQk1MTY0NUI2QjFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5VHJhbnNh
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTUxNjQ1QjZEMUI5RkE2QzgwMEY3ODlDRSAvKiBM
ZWdhY3lWZXJzaW9uQ2hhbmdlRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMkREOEY1MEQ5
MUU2QUYwMDBGODlFRSAvKiBMZWdhY3lXZWJBcmNoaXZlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0U2NUJFQjBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0ZGNjQ5MTBFQUQxNUMyMDBDMUQ2RjcgLyogTGVuZ3RoQm94LmggaW4gSGVhZGVycyAqLywKQEAg
LTMwMDA4LDIwICsyOTgyNCwxNSBAQAogCQkJCTUxOThGN0MwMUJDNDg1NjcwMEUyQ0M1RiAvKiBJ
REJDb25uZWN0aW9uVG9TZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFGNTRGOEIxQzUw
QzUwMzAwMzM4NDg4IC8qIEZldGNoQm9keS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM3
QTFCQjRDNEU4MDAxMjg5OEYgLyogSURCQ3Vyc29yLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUx
RjQxQTY5MUJBNzNCNUIwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTUxRjQxQTZCMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJDdXJzb3JCYWNrZW5kT3Bl
cmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUY3OThFNTFCRTg4MDkyMDA4QUU0OTEg
LyogSURCQ3Vyc29ySW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTcxMzhGQjFCRjNBREY0
MDAwRDVGMDEgLyogSURCQ3Vyc29ySW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM3
RDFCQjRDNEU4MDAxMjg5OEYgLyogSURCQ3Vyc29yV2l0aFZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTUxRjc5OEYzMUJFODgzOTQwMDhBRTQ5MSAvKiBJREJDdXJzb3JXaXRoVmFsdWVJbXBs
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzgwMUJCNEM0RTgwMDEyODk4RiAvKiBJREJE
YXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUY0MUE2RDFCQTczQjVCMDAyRTA1M0Ig
LyogSURCRGF0YWJhc2VCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxRjQxQTcwMUJB
NzNCNUIwMDJFMDUzQiAvKiBJREJEYXRhYmFzZUNhbGxiYWNrc0ltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTE4NUZDODQxQkI0QzRFODAwMTI4OThGIC8qIElEQkRhdGFiYXNlRXhjZXB0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzg2MUJCNEM0RTgwMDEyODk4RiAvKiBJREJE
YXRhYmFzZUlkZW50aWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE5OEY3QjAxQkJERjVD
ODAwRTJDQzVGIC8qIElEQkRhdGFiYXNlSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MUJB
NEFDMzFCQkI1Q0Q4MDBERjNENkQgLyogSURCRGF0YWJhc2VJbmZvLmNwcCBpbiBTb3VyY2VzICov
LAotCQkJCTUxODVGQzg4MUJCNEM0RTgwMDEyODk4RiAvKiBJREJEYXRhYmFzZU1ldGFkYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxNDg0NTNFMUJCOUQwN0UwMDZBNzJFRCAvKiBJREJFcnJv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkM4QTFCQjRDNEU4MDAxMjg5OEYgLyogSURC
RXZlbnREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQzhDMUJCNEM0RTgw
MDEyODk4RiAvKiBJREJGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzAwNDAsNyArMjk4
NTEsNiBAQAogCQkJCTUxNjA3MTJFMUJEODMwNzgwMERCQzRGMiAvKiBJREJPYmplY3RTdG9yZUlu
Zm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDQTMxQkI0QzRFODAwMTI4OThGIC8qIElE
Qk9wZW5EQlJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwMzEwNUExQkE4REI1NjAw
MzMyOUMwIC8qIElEQk9wZW5EQlJlcXVlc3RJbXBsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUx
RjQxQTdCMUJBNzNCNUIwMDJFMDUzQiAvKiBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxODVGQ0E4MUJCNEM0RTgwMDEyODk4RiAvKiBJREJSZXF1
ZXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEE1OEY5MUJBQ0M3RjIwMEMxOTI4MiAvKiBJ
REJSZXF1ZXN0RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTAzMTA1QzFCQThEQjU2MDAz
MzI5QzAgLyogSURCUmVxdWVzdEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDA0OCw5ICsy
OTg1OCw2IEBACiAJCQkJNTFENzIzNkMxQkI2MTc0OTAwNDc4Q0EzIC8qIElEQlJlc3VsdERhdGEu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDQkExQkI0Q0JGODAwMTI4OThGIC8qIElEQlNl
cnZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTg1RkNBQzFCQjRDNEU4MDAxMjg5OEYgLyog
SURCVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTFGNDFBNzMxQkE3M0I1QjAw
MkUwNTNCIC8qIElEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1
MUY0MUE3NTFCQTczQjVCMDAyRTA1M0IgLyogSURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9u
cy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUY0MUE3NzFCQTczQjVCMDAyRTA1M0IgLyogSURC
VHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTk4RjdCNDFC
QkUwMDNDMDBFMkNDNUYgLyogSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUxOThGN0FDMUJCREQzRUIwMEUyQ0M1RiAvKiBJREJUcmFuc2FjdGlvbkluZm8uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNTE4NUZDQUYxQkI0QzRFODAwMTI4OThGIC8qIElEQlZlcnNpb25D
aGFuZ2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMwODg1LDIyICszMDY5MiwxMSBAQAog
CQkJCUExMjBBQ0E0MTNGOTk4Q0EwMEZFNEFDNyAvKiBMYXlvdXRSZXBhaW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzNkU3MzkxQkQxODRCOTAwMkRCODkxIC8qIExheW91dFNpemUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkQ5MDY2MDYwQkUxNDFENDAwOTU2OTk4IC8qIExheW91dFN0
YXRlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxMDNDMkIxMUJBMjJEMUEwMEUyNjMzNyAvKiBM
ZWdhY3lBbnkuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE2NDVCNUExQjlGQTZDODAwRjc4OUNF
IC8qIExlZ2FjeUN1cnNvci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MTY0NUI1QzFCOUZBNkM4
MDBGNzg5Q0UgLyogTGVnYWN5Q3Vyc29yV2l0aFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTUxNjQ1QjVFMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lEYXRhYmFzZS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQk1MTY0NUI2MDFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5RmFjdG9yeS5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk1MTY0NUI2MjFCOUZBNkM4MDBGNzg5Q0UgLyogTGVnYWN5SW5k
ZXguY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE2NDVCNjQxQjlGQTZDODAwRjc4OUNFIC8qIExl
Z2FjeU9iamVjdFN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxNjQ1QjY2MUI5RkE2Qzgw
MEY3ODlDRSAvKiBMZWdhY3lPcGVuREJSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUx
NjQ1QjY4MUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUU0QzNCMUZDMEYwRTQxNzAwMDk2OTNGNiAvKiBMZWdhY3lUaWxlQ2FjaGUubW0gaW4g
U291cmNlcyAqLywKIAkJCQlFNEI2NUE1QTEzMkZBQUY5MDA3MEU3QkUgLyogTGVnYWN5VGlsZUdy
aWQubW0gaW4gU291cmNlcyAqLywKIAkJCQlFNDI0QTNBMDEzMzBERjFFMDBDRjZEQzkgLyogTGVn
YWN5VGlsZUdyaWRUaWxlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRCNjVBNUUxMzJGQURCNjAw
NzBFN0JFIC8qIExlZ2FjeVRpbGVMYXllci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUU0RTM5QUZE
MTMzMEVGQzYwMDNBQjI3NCAvKiBMZWdhY3lUaWxlTGF5ZXJQb29sLm1tIGluIFNvdXJjZXMgKi8s
Ci0JCQkJNTE2NDVCNkExQjlGQTZDODAwRjc4OUNFIC8qIExlZ2FjeVRyYW5zYWN0aW9uLmNwcCBp
biBTb3VyY2VzICovLAotCQkJCTUxNjQ1QjZDMUI5RkE2QzgwMEY3ODlDRSAvKiBMZWdhY3lWZXJz
aW9uQ2hhbmdlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyREQ4RjQwRDkxRTZBRjAw
MEY4OUVFIC8qIExlZ2FjeVdlYkFyY2hpdmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFCMjQx
N0IwRDkzMUYzRjAwRTgzRjVDIC8qIExlZ2FjeVdlYkFyY2hpdmVNYWMubW0gaW4gU291cmNlcyAq
LywKIAkJCQlCQ0U2NUJFQTBFQUNERjE2MDA3RTQ1MzMgLyogTGVuZ3RoLmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSURCQmluZGluZ1V0
aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0
aWVzLmNwcAppbmRleCBmNjc1YzViLi42NzE3YjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0aWVzLmNwcApAQCAtMzEsNyArMzEsNiBAQAog
CiAjaW5jbHVkZSAiRE9NUmVxdWVzdFN0YXRlLmgiCiAjaW5jbHVkZSAiSURCSW5kZXhJbmZvLmgi
Ci0jaW5jbHVkZSAiSURCSW5kZXhNZXRhZGF0YS5oIgogI2luY2x1ZGUgIklEQktleS5oIgogI2lu
Y2x1ZGUgIklEQktleURhdGEuaCIKICNpbmNsdWRlICJJREJLZXlQYXRoLmgiCkBAIC01MjksMzEg
KzUyOCw2IEBAIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlIGlkYktleURhdGFUb1NjcmlwdFZhbHVl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgcmV0dXJuIGlkYktleVRvU2Ny
aXB0VmFsdWUoJnJlcXVlc3RTdGF0ZSwga2V5LmdldCgpKTsKIH0KIAotdm9pZCBnZW5lcmF0ZUlu
ZGV4S2V5c0ZvclZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSURCSW5kZXhNZXRhZGF0YSYg
aW5kZXhNZXRhZGF0YSwgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUmIG9iamVjdFZhbHVl
LCBWZWN0b3I8SURCS2V5RGF0YT4mIGluZGV4S2V5cykKLXsKLSAgICBSZWZQdHI8SURCS2V5PiBp
bmRleEtleSA9IGNyZWF0ZUlEQktleUZyb21TY3JpcHRWYWx1ZUFuZEtleVBhdGgoZXhlYywgb2Jq
ZWN0VmFsdWUsIGluZGV4TWV0YWRhdGEua2V5UGF0aCk7Ci0KLSAgICBpZiAoIWluZGV4S2V5KQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWluZGV4TWV0YWRhdGEubXVsdGlFbnRyeSB8fCBp
bmRleEtleS0+dHlwZSgpICE9IEtleVR5cGU6OkFycmF5KSB7Ci0gICAgICAgIGlmICghaW5kZXhL
ZXktPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpbmRleEtleXMu
YXBwZW5kKElEQktleURhdGEoaW5kZXhLZXkuZ2V0KCkpKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBBU1NFUlQoaW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5KTsKLSAgICAgICAgQVNTRVJUKGluZGV4
S2V5LT50eXBlKCkgPT0gS2V5VHlwZTo6QXJyYXkpOwotICAgICAgICBpbmRleEtleSA9IElEQktl
eTo6Y3JlYXRlTXVsdGlFbnRyeUFycmF5KGluZGV4S2V5LT5hcnJheSgpKTsKLQotICAgICAgICBp
ZiAoIWluZGV4S2V5LT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
Zm9yIChhdXRvJiBpIDogaW5kZXhLZXktPmFycmF5KCkpCi0gICAgICAgICAgICBpbmRleEtleXMu
YXBwZW5kKElEQktleURhdGEoaS5nZXQoKSkpOwotICAgIH0KLX0KLQogc3RhdGljIFZlY3RvcjxJ
REJLZXlEYXRhPiBjcmVhdGVLZXlQYXRoQXJyYXkoRXhlY1N0YXRlJiBleGVjLCBKU1ZhbHVlIHZh
bHVlLCBjb25zdCBJREJJbmRleEluZm8mIGluZm8pCiB7CiAgICAgVmVjdG9yPElEQktleURhdGE+
IGtleXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5n
VXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9JREJCaW5kaW5nVXRpbGl0
aWVzLmgKaW5kZXggMDlmNTM0NC4uYzE3MGQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSURCQmluZGluZ1V0aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0lEQkJpbmRpbmdVdGlsaXRpZXMuaApAQCAtMzcsMTQgKzM3LDEyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIERPTVJlcXVlc3RTdGF0ZTsKIGNsYXNzIElEQkluZGV4SW5m
bzsKIGNsYXNzIElEQktleTsKK2NsYXNzIElEQktleURhdGE7CiBjbGFzcyBJREJLZXlQYXRoOwog
Y2xhc3MgSW5kZXhLZXk7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiBjbGFzcyBUaHJlYWRTYWZlRGF0
YUJ1ZmZlcjsKIAotc3RydWN0IElEQkluZGV4TWV0YWRhdGE7Ci1jbGFzcyBJREJLZXlEYXRhOwot
CiBJREJLZXlQYXRoIGlkYktleVBhdGhGcm9tVmFsdWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpT
VmFsdWUpOwogCiBib29sIGluamVjdElEQktleUludG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3Rh
dGUqLCBQYXNzUmVmUHRyPElEQktleT4sIERlcHJlY2F0ZWQ6OlNjcmlwdFZhbHVlJiwgY29uc3Qg
SURCS2V5UGF0aCYpOwpAQCAtNjcsNyArNjUsNiBAQCBKU0M6OkpTVmFsdWUgZGVzZXJpYWxpemVJ
REJWYWx1ZURhdGFUb0pTVmFsdWUoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBUaHJlYWRTYWZlRAog
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgaWRiS2V5VG9TY3JpcHRWYWx1ZShET01SZXF1ZXN0U3Rh
dGUqLCBQYXNzUmVmUHRyPElEQktleT4pOwogUmVmUHRyPElEQktleT4gc2NyaXB0VmFsdWVUb0lE
QktleShET01SZXF1ZXN0U3RhdGUqLCBjb25zdCBKU0M6OkpTVmFsdWUmKTsKIFJlZlB0cjxJREJL
ZXk+IHNjcmlwdFZhbHVlVG9JREJLZXkoSlNDOjpFeGVjU3RhdGUmLCBjb25zdCBKU0M6OkpTVmFs
dWUmKTsKLVdFQkNPUkVfRVhQT1JUIHZvaWQgZ2VuZXJhdGVJbmRleEtleXNGb3JWYWx1ZShKU0M6
OkV4ZWNTdGF0ZSosIGNvbnN0IElEQkluZGV4TWV0YWRhdGEmLCBjb25zdCBEZXByZWNhdGVkOjpT
Y3JpcHRWYWx1ZSYgb2JqZWN0VmFsdWUsIFZlY3RvcjxJREJLZXlEYXRhPiYgaW5kZXhLZXlzKTsK
IAogRGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgaWRiS2V5RGF0YVRvU2NyaXB0VmFsdWUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IElEQktleURhdGEmKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNNYWluVGhyZWFkRXhlY1N0YXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTWFpblRocmVhZEV4ZWNTdGF0ZS5jcHAKaW5kZXggZjE2
YmIyMS4uZjQ5ZjRhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNN
YWluVGhyZWFkRXhlY1N0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U01haW5UaHJlYWRFeGVjU3RhdGUuY3BwCkBAIC0yOSwyMiArMjksMTIgQEAKICNpbmNsdWRlICJN
aWNyb3Rhc2tzLmgiCiAjaW5jbHVkZSAiTXV0YXRpb25PYnNlcnZlci5oIgogCi0jaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCi0jaW5jbHVkZSAiSURCUGVuZGluZ1RyYW5zYWN0aW9uTW9uaXRv
ci5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogSlNDOjpFeGVjU3RhdGUqIEpT
TWFpblRocmVhZEV4ZWNTdGF0ZTo6c19tYWluVGhyZWFkU3RhdGUgPSAwOwogCiB2b2lkIEpTTWFp
blRocmVhZEV4ZWNTdGF0ZTo6ZGlkTGVhdmVTY3JpcHRDb250ZXh0KCkKIHsKLSNpZiBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKLSAgICAvLyBJbmRleGVkIERCIHJlcXVpcmVzIHRoYXQgdHJhbnNh
Y3Rpb25zIGFyZSBjcmVhdGVkIHdpdGggYW4gaW50ZXJuYWwgfGFjdGl2ZXwgZmxhZwotICAgIC8v
IHNldCB0byB0cnVlLCBidXQgdGhlIGZsYWcgYmVjb21lcyBmYWxzZSB3aGVuIGNvbnRyb2wgcmV0
dXJucyB0byB0aGUgZXZlbnQgbG9vcC4KLSAgICBJREJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9y
OjpkZWFjdGl2YXRlTmV3VHJhbnNhY3Rpb25zKCk7Ci0jZW5kaWYKLQogICAgIE1pY3JvdGFza1F1
ZXVlOjptYWluVGhyZWFkUXVldWUoKS5wZXJmb3JtTWljcm90YXNrQ2hlY2twb2ludCgpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFn
ZW50LmNwcAppbmRleCBmYzNmZjU3Li44OTAxMzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAKQEAgLTQ3LDggKzQ3LDYg
QEAKICNpbmNsdWRlICJJREJDdXJzb3IuaCIKICNpbmNsdWRlICJJREJDdXJzb3JXaXRoVmFsdWUu
aCIKICNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgotI2luY2x1ZGUgIklEQkRhdGFiYXNlQ2FsbGJh
Y2tzLmgiCi0jaW5jbHVkZSAiSURCRGF0YWJhc2VNZXRhZGF0YS5oIgogI2luY2x1ZGUgIklEQkZh
Y3RvcnkuaCIKICNpbmNsdWRlICJJREJJbmRleC5oIgogI2luY2x1ZGUgIklEQktleS5oIgpAQCAt
NTYsMTIgKzU0LDEwIEBACiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJP
YmplY3RTdG9yZS5oIgogI2luY2x1ZGUgIklEQk9wZW5EQlJlcXVlc3QuaCIKLSNpbmNsdWRlICJJ
REJQZW5kaW5nVHJhbnNhY3Rpb25Nb25pdG9yLmgiCiAjaW5jbHVkZSAiSURCUmVxdWVzdC5oIgog
I2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yUGFnZUFnZW50
LmgiCiAjaW5jbHVkZSAiSW5zdHJ1bWVudGluZ0FnZW50cy5oIgotI2luY2x1ZGUgIkxlZ2FjeURh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKICNpbmNsdWRlIDxpbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHQuaD4KICNpbmNsdWRlIDxpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmg+CkBAIC0xNTAsNyArMTQ2LDcgQEAgcHVibGljOgogICAgICAgICA6IG1fY29udGV4
dChjb250ZXh0KSB7IH0KICAgICB2aXJ0dWFsIH5FeGVjdXRhYmxlV2l0aERhdGFiYXNlKCkgeyB9
OwogICAgIHZvaWQgc3RhcnQoSURCRmFjdG9yeSosIFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZU5hbWUpOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKFJlZlB0cjxMZWdh
Y3lEYXRhYmFzZT4mJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKCkgPSAwOwogICAg
IHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSA9IDA7CiAgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfTsKIHBy
aXZhdGU6CkBAIC0xOTQsMTAgKzE5MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxMZWdhY3lEYXRhYmFzZT4gaWRiRGF0YWJhc2Ug
PSBhZG9wdFJlZihzdGF0aWNfY2FzdDxMZWdhY3lEYXRhYmFzZSo+KHJlcXVlc3RSZXN1bHQtPmlk
YkRhdGFiYXNlKCkubGVha1JlZigpKSk7Ci0gICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFz
ZS0+ZXhlY3V0ZShXVEZNb3ZlKGlkYkRhdGFiYXNlKSk7Ci0gICAgICAgIElEQlBlbmRpbmdUcmFu
c2FjdGlvbk1vbml0b3I6OmRlYWN0aXZhdGVOZXdUcmFuc2FjdGlvbnMoKTsKLSAgICAgICAgaWRi
RGF0YWJhc2UtPmNsb3NlKCk7CisgICAgICAgIC8vIEZJWE1FICh3ZWJraXQub3JnL2IvMTU0Njg2
KSAtIFJlaW1wbGVtZW50IHRoaXMuCisgICAgICAgIG1fZXhlY3V0YWJsZVdpdGhEYXRhYmFzZS0+
ZXhlY3V0ZSgpOwogICAgIH0KIAogcHJpdmF0ZToKQEAgLTIxOSw2NiArMjEzLDYgQEAgdm9pZCBF
eGVjdXRhYmxlV2l0aERhdGFiYXNlOjpzdGFydChJREJGYWN0b3J5KiBpZGJGYWN0b3J5LCBTZWN1
cml0eU9yaWdpbiosIGNvbnMKICAgICBpZGJPcGVuREJSZXF1ZXN0LT5hZGRFdmVudExpc3RlbmVy
KGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIFdURk1vdmUoY2FsbGJhY2spLCBmYWxzZSk7CiB9
CiAKLXN0YXRpYyBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgSURCRGF0YWJh
c2UqIGlkYkRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3Ry
aW5nJiBtb2RlID0gSURCVHJhbnNhY3Rpb246Om1vZGVSZWFkT25seSgpKQotewotICAgIEV4Y2Vw
dGlvbkNvZGVXaXRoTWVzc2FnZSBlYzsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb24+IGlkYlRy
YW5zYWN0aW9uID0gaWRiRGF0YWJhc2UtPnRyYW5zYWN0aW9uKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIG9iamVjdFN0b3JlTmFtZSwgbW9kZSwgZWMpOwotICAgIGlmIChlYy5jb2RlKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gaWRiVHJhbnNhY3Rpb247Ci19Ci0KLXN0YXRp
YyBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlRm9yVHJhbnNhY3Rpb24oSURCVHJh
bnNhY3Rpb24qIGlkYlRyYW5zYWN0aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSkK
LXsKLSAgICBFeGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7Ci0gICAgUmVmUHRyPElEQk9iamVj
dFN0b3JlPiBpZGJPYmplY3RTdG9yZSA9IGlkYlRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZShvYmpl
Y3RTdG9yZU5hbWUsIGVjKTsKLSAgICBpZiAoZWMuY29kZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgcmV0dXJuIGlkYk9iamVjdFN0b3JlOwotfQotCi1zdGF0aWMgUmVmUHRyPElEQklu
ZGV4PiBpbmRleEZvck9iamVjdFN0b3JlKElEQk9iamVjdFN0b3JlKiBpZGJPYmplY3RTdG9yZSwg
Y29uc3QgU3RyaW5nJiBpbmRleE5hbWUpCi17Ci0gICAgRXhjZXB0aW9uQ29kZVdpdGhNZXNzYWdl
IGVjOwotICAgIFJlZlB0cjxJREJJbmRleD4gaWRiSW5kZXggPSBpZGJPYmplY3RTdG9yZS0+aW5k
ZXgoaW5kZXhOYW1lLCBlYyk7Ci0gICAgaWYgKGVjLmNvZGUpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBpZGJJbmRleDsKLX0KLQotc3RhdGljIFJlZlB0cjxLZXlQYXRoPiBr
ZXlQYXRoRnJvbUlEQktleVBhdGgoY29uc3QgSURCS2V5UGF0aCYgaWRiS2V5UGF0aCkKLXsKLSAg
ICBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aDsKLSAgICBzd2l0Y2ggKGlkYktleVBhdGgudHlwZSgp
KSB7Ci0gICAgY2FzZSBJbmRleGVkREI6OktleVBhdGhUeXBlOjpOdWxsOgotICAgICAgICBrZXlQ
YXRoID0gS2V5UGF0aDo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEtleVBhdGg6OlR5
cGU6Ok51bGwpCi0gICAgICAgICAgICAucmVsZWFzZSgpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEluZGV4ZWREQjo6S2V5UGF0aFR5cGU6OlN0cmluZzoKLSAgICAgICAga2V5UGF0aCA9IEtl
eVBhdGg6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpTdHJp
bmcpCi0gICAgICAgICAgICAucmVsZWFzZSgpOwotICAgICAgICBrZXlQYXRoLT5zZXRTdHJpbmco
aWRiS2V5UGF0aC5zdHJpbmcoKSk7Ci0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbmRleGVk
REI6OktleVBhdGhUeXBlOjpBcnJheTogewotICAgICAgICBhdXRvIGFycmF5ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7Ci0gICAgICAgIGZvciAoYXV0byYg
c3RyaW5nIDogaWRiS2V5UGF0aC5hcnJheSgpKQotICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0o
c3RyaW5nKTsKLSAgICAgICAga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpCi0gICAgICAgICAg
ICAuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpBcnJheSkKLSAgICAgICAgICAgIC5yZWxlYXNlKCk7
Ci0gICAgICAgIGtleVBhdGgtPnNldEFycmF5KFdURk1vdmUoYXJyYXkpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIH0KLQotICAgIHJldHVybiBrZXlQYXRoOwotfQotCiBjbGFzcyBEYXRhYmFzZUxvYWRlciA6
IHB1YmxpYyBFeGVjdXRhYmxlV2l0aERhdGFiYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PERhdGFiYXNlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKQEAgLTI4OCw0
NSArMjIyLDEyIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkRhdGFiYXNlTG9hZGVyKCkgeyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShSZWZQdHI8TGVnYWN5RGF0YWJhc2U+JiYgZGF0
YWJhc2UpIG92ZXJyaWRlCisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGUoKSBvdmVycmlkZQogICAg
IHsKICAgICAgICAgaWYgKCFyZXF1ZXN0Q2FsbGJhY2soKS5pc0FjdGl2ZSgpKQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEgZGF0YWJhc2VN
ZXRhZGF0YSA9IGRhdGFiYXNlLT5tZXRhZGF0YSgpOwotCi0gICAgICAgIGF1dG8gb2JqZWN0U3Rv
cmVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXJyYXk8SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5k
ZXhlZERCOjpPYmplY3RTdG9yZT46OmNyZWF0ZSgpOwotCi0gICAgICAgIGZvciAoY29uc3QgSURC
T2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRhZGF0YSA6IGRhdGFiYXNlTWV0YWRh
dGEub2JqZWN0U3RvcmVzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBhdXRvIGluZGV4ZXMgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6
Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKLQotICAgICAgICAgICAgZm9yIChjb25zdCBJ
REJJbmRleE1ldGFkYXRhJiBpbmRleE1ldGFkYXRhIDogb2JqZWN0U3RvcmVNZXRhZGF0YS5pbmRl
eGVzLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgUmVmPE9iamVjdFN0b3JlSW5kZXg+IG9i
amVjdFN0b3JlSW5kZXggPSBPYmplY3RTdG9yZUluZGV4OjpjcmVhdGUoKQotICAgICAgICAgICAg
ICAgICAgICAuc2V0TmFtZShpbmRleE1ldGFkYXRhLm5hbWUpCi0gICAgICAgICAgICAgICAgICAg
IC5zZXRLZXlQYXRoKGtleVBhdGhGcm9tSURCS2V5UGF0aChpbmRleE1ldGFkYXRhLmtleVBhdGgp
KQotICAgICAgICAgICAgICAgICAgICAuc2V0VW5pcXVlKGluZGV4TWV0YWRhdGEudW5pcXVlKQot
ICAgICAgICAgICAgICAgICAgICAuc2V0TXVsdGlFbnRyeShpbmRleE1ldGFkYXRhLm11bHRpRW50
cnkpCi0gICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAgaW5k
ZXhlcy0+YWRkSXRlbShXVEZNb3ZlKG9iamVjdFN0b3JlSW5kZXgpKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgUmVmPE9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IE9iamVjdFN0b3Jl
OjpjcmVhdGUoKQotICAgICAgICAgICAgICAgIC5zZXROYW1lKG9iamVjdFN0b3JlTWV0YWRhdGEu
bmFtZSkKLSAgICAgICAgICAgICAgICAuc2V0S2V5UGF0aChrZXlQYXRoRnJvbUlEQktleVBhdGgo
b2JqZWN0U3RvcmVNZXRhZGF0YS5rZXlQYXRoKSkKLSAgICAgICAgICAgICAgICAuc2V0QXV0b0lu
Y3JlbWVudChvYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQpCi0gICAgICAgICAgICAg
ICAgLnNldEluZGV4ZXMoV1RGTW92ZShpbmRleGVzKSkKLSAgICAgICAgICAgICAgICAucmVsZWFz
ZSgpOwotCi0gICAgICAgICAgICBvYmplY3RTdG9yZXMtPmFkZEl0ZW0oV1RGTW92ZShvYmplY3RT
dG9yZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVmPERhdGFiYXNlV2l0aE9iamVjdFN0b3Jl
cz4gcmVzdWx0ID0gRGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzOjpjcmVhdGUoKQotICAgICAgICAg
ICAgLnNldE5hbWUoZGF0YWJhc2VNZXRhZGF0YS5uYW1lKQotICAgICAgICAgICAgLnNldFZlcnNp
b24oZGF0YWJhc2VNZXRhZGF0YS52ZXJzaW9uKQotICAgICAgICAgICAgLnNldE9iamVjdFN0b3Jl
cyhXVEZNb3ZlKG9iamVjdFN0b3JlcykpCi0gICAgICAgICAgICAucmVsZWFzZSgpOwotCi0gICAg
ICAgIG1fcmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEZNb3ZlKHJlc3VsdCkpOworICAg
ICAgICAvLyBGSVhNRSAod2Via2l0Lm9yZy9iLzE1NDY4NikgLSBSZWltcGxlbWVudCB0aGlzLgog
ICAgIH0KIAogICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBv
dmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQpAQCAtNTE4LDM2ICs0
MTksMTIgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+RGF0YUxvYWRlcigpIHsgfQogCi0gICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGUoUmVmUHRyPExlZ2FjeURhdGFiYXNlPiYmIGRhdGFiYXNlKSBv
dmVycmlkZQorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKCkgb3ZlcnJpZGUKICAgICB7CiAgICAg
ICAgIGlmICghcmVxdWVzdENhbGxiYWNrKCkuaXNBY3RpdmUoKSkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBpZGJUcmFuc2FjdGlvbiA9IHRyYW5z
YWN0aW9uRm9yRGF0YWJhc2UoY29udGV4dCgpLCBkYXRhYmFzZS5nZXQoKSwgbV9vYmplY3RTdG9y
ZU5hbWUpOwotICAgICAgICBpZiAoIWlkYlRyYW5zYWN0aW9uKSB7Ci0gICAgICAgICAgICBtX3Jl
cXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBnZXQgdHJhbnNhY3Rpb24iKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmU+IGlkYk9iamVjdFN0b3JlID0gb2JqZWN0U3RvcmVGb3JUcmFuc2FjdGlvbihpZGJUcmFu
c2FjdGlvbi5nZXQoKSwgbV9vYmplY3RTdG9yZU5hbWUpOwotICAgICAgICBpZiAoIWlkYk9iamVj
dFN0b3JlKSB7Ci0gICAgICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1cmUoIkNv
dWxkIG5vdCBnZXQgb2JqZWN0IHN0b3JlIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLQotICAgICAgICBSZWY8T3BlbkN1cnNvckNhbGxiYWNrPiBvcGVuQ3Vyc29yQ2FsbGJhY2sg
PSBPcGVuQ3Vyc29yQ2FsbGJhY2s6OmNyZWF0ZShtX2luamVjdGVkU2NyaXB0LCBtX3JlcXVlc3RD
YWxsYmFjay5jb3B5UmVmKCksIG1fc2tpcENvdW50LCBtX3BhZ2VTaXplKTsKIAotICAgICAgICBF
eGNlcHRpb25Db2RlV2l0aE1lc3NhZ2UgZWM7Ci0gICAgICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBp
ZGJSZXF1ZXN0OwotICAgICAgICBpZiAoIW1faW5kZXhOYW1lLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgUmVmUHRyPElEQkluZGV4PiBpZGJJbmRleCA9IGluZGV4Rm9yT2JqZWN0U3RvcmUoaWRi
T2JqZWN0U3RvcmUuZ2V0KCksIG1faW5kZXhOYW1lKTsKLSAgICAgICAgICAgIGlmICghaWRiSW5k
ZXgpIHsKLSAgICAgICAgICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1cmUoIkNv
dWxkIG5vdCBnZXQgaW5kZXgiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGlkYlJlcXVlc3QgPSBpZGJJbmRleC0+b3BlbkN1cnNvcihjb250
ZXh0KCksIG1faWRiS2V5UmFuZ2UuZ2V0KCksIGVjKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBpZGJSZXF1ZXN0ID0gaWRiT2JqZWN0U3RvcmUtPm9wZW5DdXJzb3IoY29udGV4dCgpLCBt
X2lkYktleVJhbmdlLmdldCgpLCBlYyk7Ci0gICAgICAgIGlkYlJlcXVlc3QtPmFkZEV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCwgV1RGTW92ZShvcGVuQ3Vyc29yQ2FsbGJh
Y2spLCBmYWxzZSk7CisgICAgICAgIC8vIEZJWE1FICh3ZWJraXQub3JnL2IvMTU0Njg2KSAtIFJl
aW1wbGVtZW50IHRoaXMuCiAgICAgfQogCiAgICAgdmlydHVhbCBSZXF1ZXN0Q2FsbGJhY2smIHJl
cXVlc3RDYWxsYmFjaygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgp
OyB9CkBAIC03MzQsMjkgKzYxMSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIHZp
cnR1YWwgdm9pZCBleGVjdXRlKFJlZlB0cjxMZWdhY3lEYXRhYmFzZT4mJiBkYXRhYmFzZSkgb3Zl
cnJpZGUKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZSgpIG92ZXJyaWRlCiAgICAgewogICAgICAg
ICBpZiAoIXJlcXVlc3RDYWxsYmFjaygpLmlzQWN0aXZlKCkpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gaWRiVHJhbnNhY3Rpb24gPSB0cmFuc2Fj
dGlvbkZvckRhdGFiYXNlKGNvbnRleHQoKSwgZGF0YWJhc2UuZ2V0KCksIG1fb2JqZWN0U3RvcmVO
YW1lLCBJREJUcmFuc2FjdGlvbjo6bW9kZVJlYWRXcml0ZSgpKTsKLSAgICAgICAgaWYgKCFpZGJU
cmFuc2FjdGlvbikgewotICAgICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJl
KCJDb3VsZCBub3QgZ2V0IHRyYW5zYWN0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBpZGJPYmplY3RTdG9yZSA9IG9i
amVjdFN0b3JlRm9yVHJhbnNhY3Rpb24oaWRiVHJhbnNhY3Rpb24uZ2V0KCksIG1fb2JqZWN0U3Rv
cmVOYW1lKTsKLSAgICAgICAgaWYgKCFpZGJPYmplY3RTdG9yZSkgewotICAgICAgICAgICAgbV9y
ZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgZ2V0IG9iamVjdCBzdG9yZSIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAKLSAgICAgICAgRXhjZXB0aW9uQ29k
ZVdpdGhNZXNzYWdlIGVjOwotICAgICAgICBSZWZQdHI8SURCUmVxdWVzdD4gaWRiUmVxdWVzdCA9
IGlkYk9iamVjdFN0b3JlLT5jbGVhcihjb250ZXh0KCksIGVjKTsKLSAgICAgICAgQVNTRVJUKCFl
Yy5jb2RlKTsKLSAgICAgICAgaWYgKGVjLmNvZGUpIHsKLSAgICAgICAgICAgIG1fcmVxdWVzdENh
bGxiYWNrLT5zZW5kRmFpbHVyZShTdHJpbmc6OmZvcm1hdCgiQ291bGQgbm90IGNsZWFyIG9iamVj
dCBzdG9yZSAnJXMnOiAlZCIsIG1fb2JqZWN0U3RvcmVOYW1lLnV0ZjgoKS5kYXRhKCksIGVjLmNv
ZGUpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZGJUcmFuc2Fj
dGlvbi0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwgQ2xlYXJP
YmplY3RTdG9yZUxpc3RlbmVyOjpjcmVhdGUobV9yZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpKSwg
ZmFsc2UpOworICAgICAgICAvLyBGSVhNRSAod2Via2l0Lm9yZy9iLzE1NDY4NikgLSBSZWltcGxl
bWVudCB0aGlzLgogICAgIH0KIAogICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0
Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAppbmRleCBmNDZkMGQwLi4zYTZkMTVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcApAQCAtMzYsNyArMzYsNiBA
QAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVOZXR3b3JraW5nQ29udGV4dC5o
IgogI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSW5Qcm9jZXNzSURCU2VydmVyLmgiCiAjaW5jbHVk
ZSAiUGFnZUNvbmZpZ3VyYXRpb24uaCIKICNpbmNsdWRlICJTdG9yYWdlQXJlYS5oIgpAQCAtNTIs
OSArNTEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVtcHR5RGF0YWJhc2VQcm92
aWRlciBmaW5hbCA6IHB1YmxpYyBEYXRhYmFzZVByb3ZpZGVyIHsKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZT4gY3JlYXRlSURCRmFjdG9yeUJhY2tlbmQoKSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmly
dHVhbCBib29sIHN1cHBvcnRzTW9kZXJuSURCKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICAKICAgICB2aXJ0dWFsIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBpZGJDb25u
ZWN0aW9uVG9TZXJ2ZXJGb3JTZXNzaW9uKGNvbnN0IFNlc3Npb25JRCYpCiAgICAgewogICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVmPEluUHJvY2Vzc0lEQlNlcnZlcj4+IHNoYXJlZENv
bm5lY3Rpb24oSW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RhdGFiYXNlUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9EYXRhYmFzZVByb3ZpZGVyLmNwcAppbmRleCAzOTFkNDAzLi5lMzdhOGE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RhdGFiYXNlUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRGF0YWJhc2VQcm92aWRlci5jcHAKQEAgLTI2LDI0ICsyNiwxMCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlUHJvdmlkZXIuaCIKIAotI2luY2x1
ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogRGF0YWJhc2VQcm92aWRlcjo6fkRhdGFiYXNlUHJvdmlkZXIoKQogewogfQogCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCi1JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogRGF0YWJh
c2VQcm92aWRlcjo6aWRiRmFjdG9yeUJhY2tlbmQoKQotewotICAgIGlmICghbV9kaWRDcmVhdGVJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZSkgewotICAgICAgICBtX2JhY2tlbmRJbnRlcmZhY2Ug
PSBjcmVhdGVJREJGYWN0b3J5QmFja2VuZCgpOwotICAgICAgICBtX2RpZENyZWF0ZUlEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9iYWNrZW5k
SW50ZXJmYWNlLmdldCgpOwotfQotI2VuZGlmCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRGF0YWJhc2VQcm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EYXRhYmFz
ZVByb3ZpZGVyLmgKaW5kZXggMDFmZjRmNi4uZGUxOGQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9EYXRhYmFzZVByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
YXRhYmFzZVByb3ZpZGVyLmgKQEAgLTMyLDcgKzMyLDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgSURCQ29ubmVjdGlvbk1hbmFnZXI7Ci1jbGFzcyBJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZTsKIGNsYXNzIFNlc3Npb25JRDsKIAogbmFtZXNwYWNlIElEQkNsaWVudCB7CkBAIC00
NCwxOSArNDMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RGF0YWJhc2VQcm92aWRlcigpOwog
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgSURCRmFjdG9yeUJhY2tlbmRJbnRl
cmZhY2UqIGlkYkZhY3RvcnlCYWNrZW5kKCk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNN
b2Rlcm5JREIoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJREJDbGllbnQ6OklEQkNvbm5lY3Rp
b25Ub1NlcnZlciYgaWRiQ29ubmVjdGlvblRvU2VydmVyRm9yU2Vzc2lvbihjb25zdCBTZXNzaW9u
SUQmKSA9IDA7CiAjZW5kaWYKLQotcHJpdmF0ZToKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKLSAgICB2aXJ0dWFsIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gY3JlYXRl
SURCRmFjdG9yeUJhY2tlbmQoKSA9IDA7Ci0KLSAgICBib29sIG1fZGlkQ3JlYXRlSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UgeyBmYWxzZSB9OwotICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZT4gbV9iYWNrZW5kSW50ZXJmYWNlOwotI2VuZGlmCiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAKaW5kZXggM2Y3NDFjZi4u
N2JjOTM5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRD
b3BpZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVy
LmNwcApAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgIklEQkN1cnNvckluZm8uaCIKICNpbmNs
dWRlICJJREJEYXRhYmFzZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUluZm8u
aCIKLSNpbmNsdWRlICJJREJEYXRhYmFzZU1ldGFkYXRhLmgiCiAjaW5jbHVkZSAiSURCRXJyb3Iu
aCIKICNpbmNsdWRlICJJREJHZXRSZXN1bHQuaCIKICNpbmNsdWRlICJJREJJbmRleEluZm8uaCIK
QEAgLTExMSwyMSArMTEwLDExIEBAIEluZGV4ZWREQjo6Q3Vyc29yVHlwZSBDcm9zc1RocmVhZENv
cGllckJhc2U8ZmFsc2UsIGZhbHNlLCBJbmRleGVkREI6OkN1cnNvclR5cGU+CiAgICAgcmV0dXJu
IHR5cGU7CiB9CiAKLUNyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIElEQkRhdGFi
YXNlTWV0YWRhdGE+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIElE
QkRhdGFiYXNlTWV0YWRhdGE+Ojpjb3B5KGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmIG1ldGFk
YXRhKQotewotICAgIHJldHVybiBtZXRhZGF0YS5pc29sYXRlZENvcHkoKTsKLX0KLQogQ3Jvc3NU
aHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCR2V0UmVzdWx0Pjo6VHlwZSBDcm9zc1Ro
cmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBJREJHZXRSZXN1bHQ+Ojpjb3B5KGNvbnN0IElE
QkdldFJlc3VsdCYgcmVzdWx0KQogewogICAgIHJldHVybiByZXN1bHQuaXNvbGF0ZWRDb3B5KCk7
CiB9CiAKLUNyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIElEQkluZGV4TWV0YWRh
dGE+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIElEQkluZGV4TWV0
YWRhdGE+Ojpjb3B5KGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIG1ldGFkYXRhKQotewotICAgIHJl
dHVybiBtZXRhZGF0YS5pc29sYXRlZENvcHkoKTsKLX0KLQogQ3Jvc3NUaHJlYWRDb3BpZXJCYXNl
PGZhbHNlLCBmYWxzZSwgSURCS2V5RGF0YT46OlR5cGUgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZh
bHNlLCBmYWxzZSwgSURCS2V5RGF0YT46OmNvcHkoY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSkK
IHsKICAgICByZXR1cm4ga2V5RGF0YS5pc29sYXRlZENvcHkoKTsKQEAgLTEzNiwxMSArMTI1LDYg
QEAgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCS2V5UmFuZ2VEYXRhPjo6
VHlwZSBDcm9zc1RocmVhZENvcGllckJhc2UKICAgICByZXR1cm4ga2V5UmFuZ2VEYXRhLmlzb2xh
dGVkQ29weSgpOwogfQogCi1Dcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBJREJP
YmplY3RTdG9yZU1ldGFkYXRhPjo6VHlwZSBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZh
bHNlLCBJREJPYmplY3RTdG9yZU1ldGFkYXRhPjo6Y29weShjb25zdCBJREJPYmplY3RTdG9yZU1l
dGFkYXRhJiBtZXRhZGF0YSkKLXsKLSAgICByZXR1cm4gbWV0YWRhdGEuaXNvbGF0ZWRDb3B5KCk7
Ci19Ci0KIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIElEQkRhdGFiYXNlSW5m
bz46OlR5cGUgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgSURCRGF0YWJhc2VJ
bmZvPjo6Y29weShjb25zdCBJREJEYXRhYmFzZUluZm8mIGluZm8pCiB7CiAgICAgcmV0dXJuIGlu
Zm8uaXNvbGF0ZWRDb3B5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
cm9zc1RocmVhZENvcGllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRD
b3BpZXIuaAppbmRleCA3NDFjYTc3Li5lN2E2MjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKQEAgLTE2MSwyNCArMTYxLDEyIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEluZGV4ZWREQjo6Q3Vyc29y
VHlwZSBjb3B5KGNvbnN0IEluZGV4ZWREQjo6Q3Vyc29yVHlwZSYpOwogICAgIH07CiAKLSAgICBz
dHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YTsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBXRUJDT1JF
X0VYUE9SVCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBJREJEYXRhYmFzZU1l
dGFkYXRhPiB7Ci0gICAgICAgIHR5cGVkZWYgSURCRGF0YWJhc2VNZXRhZGF0YSBUeXBlOwotICAg
ICAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IElEQkRhdGFiYXNlTWV0YWRhdGEmKTsKLSAgICB9
OwotCiAgICAgY2xhc3MgSURCR2V0UmVzdWx0OwogICAgIHRlbXBsYXRlPD4gc3RydWN0IFdFQkNP
UkVfRVhQT1JUIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIElEQkdldFJlc3Vs
dD4gewogICAgICAgICB0eXBlZGVmIElEQkdldFJlc3VsdCBUeXBlOwogICAgICAgICBzdGF0aWMg
VHlwZSBjb3B5KGNvbnN0IElEQkdldFJlc3VsdCYpOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgSURC
SW5kZXhNZXRhZGF0YTsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBXRUJDT1JFX0VYUE9SVCBDcm9z
c1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBJREJJbmRleE1ldGFkYXRhPiB7Ci0gICAg
ICAgIHR5cGVkZWYgSURCSW5kZXhNZXRhZGF0YSBUeXBlOwotICAgICAgICBzdGF0aWMgVHlwZSBj
b3B5KGNvbnN0IElEQkluZGV4TWV0YWRhdGEmKTsKLSAgICB9OwotCiAgICAgY2xhc3MgSURCS2V5
RGF0YTsKICAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBXRUJDT1JFX0VYUE9SVCBDcm9zc1RocmVhZENv
cGllckJhc2U8ZmFsc2UsIGZhbHNlLCBJREJLZXlEYXRhPiB7CiAgICAgICAgIHR5cGVkZWYgSURC
S2V5RGF0YSBUeXBlOwpAQCAtMTkxLDEyICsxNzksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29uc3QgSURCS2V5UmFuZ2VEYXRhJik7CiAgICAgfTsK
IAotICAgIHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhOwotICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IFdFQkNPUkVfRVhQT1JUIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIElE
Qk9iamVjdFN0b3JlTWV0YWRhdGE+IHsKLSAgICAgICAgdHlwZWRlZiBJREJPYmplY3RTdG9yZU1l
dGFkYXRhIFR5cGU7Ci0gICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29uc3QgSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YSYpOwotICAgIH07Ci0KICAgICBjbGFzcyBJREJEYXRhYmFzZUluZm87CiAgICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgV0VCQ09SRV9FWFBPUlQgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZh
bHNlLCBmYWxzZSwgSURCRGF0YWJhc2VJbmZvPiB7CiAgICAgICAgIHR5cGVkZWYgSURCRGF0YWJh
c2VJbmZvIFR5cGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE5ZGYwNDcuLjU0ZjVmMjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTYtMDItMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZSBMZWdhY3lJREIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFN0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHA6
CisgICAgICAgIChXZWJEYXRhYmFzZVByb3ZpZGVyOjpjcmVhdGVJREJGYWN0b3J5QmFja2VuZCk6
IERlbGV0ZWQuCisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmg6CisKIDIw
MTYtMDItMjUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
W1dpbl1bQ01ha2VdIERvbid0IHVzZSBpbmNyZW1lbnRhbCBsaW5raW5nCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAKaW5kZXggZDkwMjBmMy4uZmFmYWYx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcApA
QCAtMjUsNyArMjUsNiBAQAogCiAjaW5jbHVkZSAiV2ViRGF0YWJhc2VQcm92aWRlci5oIgogCi0j
aW5jbHVkZSA8V2ViQ29yZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAK
QEAgLTQ1LDExICs0NCw2IEBAIFdlYkRhdGFiYXNlUHJvdmlkZXI6On5XZWJEYXRhYmFzZVByb3Zp
ZGVyKCkKIH0KIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotUmVmUHRyPFdlYkNvcmU6
OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBXZWJEYXRhYmFzZVByb3ZpZGVyOjpjcmVhdGVJ
REJGYWN0b3J5QmFja2VuZCgpCi17Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KIFdlYkNvcmU6
OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBXZWJEYXRhYmFzZVByb3ZpZGVyOjpp
ZGJDb25uZWN0aW9uVG9TZXJ2ZXJGb3JTZXNzaW9uKGNvbnN0IFdlYkNvcmU6OlNlc3Npb25JRCYg
c2Vzc2lvbklEKQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9pZGJTZXJ2ZXJNYXAuYWRkKHNlc3Np
b25JRC5zZXNzaW9uSUQoKSwgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0
b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1dlYkRh
dGFiYXNlUHJvdmlkZXIuaAppbmRleCBiNzA5MmFkLi4zNGY1N2ZiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oCkBAIC00Miw3ICs0Miw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5XZWJEYXRhYmFzZVByb3ZpZGVyKCk7CiAKICNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNNb2Rlcm5JREIoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJREJDbGll
bnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgaWRiQ29ubmVjdGlvblRvU2VydmVyRm9yU2Vzc2lv
bihjb25zdCBXZWJDb3JlOjpTZXNzaW9uSUQmKSBvdmVycmlkZTsKICNlbmRpZgogCkBAIC01Miw3
ICs1MSw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFN0cmluZyBpbmRleGVkRGF0YWJhc2VEaXJl
Y3RvcnlQYXRoKCk7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICB2aXJ0dWFs
IFJlZlB0cjxXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSURCRmFj
dG9yeUJhY2tlbmQoKSBvdmVycmlkZTsKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2Vi
Q29yZTo6SW5Qcm9jZXNzSURCU2VydmVyPj4gbV9pZGJTZXJ2ZXJNYXA7CiAjZW5kaWYKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQy
L0NNYWtlTGlzdHMudHh0CmluZGV4IGVkMjQxM2MuLjRjZTc0NjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CkBAIC0zLDcgKzMsNiBAQCBzZXQoV2ViS2l0Ml9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAg
IiR7V0VCS0lUMl9ESVJ9IgogICAgICIke1dFQktJVDJfRElSfS9EYXRhYmFzZVByb2Nlc3MiCiAg
ICAgIiR7V0VCS0lUMl9ESVJ9L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIiCi0gICAgIiR7V0VC
S0lUMl9ESVJ9L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlIgogICAgICIke1dFQktJ
VDJfRElSfS9OZXR3b3JrUHJvY2VzcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vTmV0d29ya1Byb2Nl
c3MvQ3VzdG9tUHJvdG9jb2xzIgogICAgICIke1dFQktJVDJfRElSfS9OZXR3b3JrUHJvY2Vzcy9E
b3dubG9hZHMiCkBAIC03Miw3ICs3MSw2IEBAIHNldChXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9iYXR0ZXJ5IgogICAgICIke1dFQkNPUkVf
RElSfS9Nb2R1bGVzL2luZGV4ZWRkYiIKICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9pbmRl
eGVkZGIvY2xpZW50IgotICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL2luZGV4ZWRkYi9sZWdh
Y3kiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlciIKICAgICAi
JHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkIgogICAgICIke1dFQkNPUkVf
RElSfS9Nb2R1bGVzL21lZGlhc3RyZWFtIgpAQCAtMTk5LDE2ICsxOTcsOCBAQCBzZXQoV2ViS2l0
Ml9TT1VSQ0VTCiAgICAgRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKICAgICBE
YXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAogCi0gICAg
RGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNw
cAotICAgIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURCU2VyaWFsaXphdGlvbi5jcHAKLSAg
ICBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0xlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlLmNwcAot
ICAgIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyLmNwcAogICAgIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlv
blRvQ2xpZW50LmNwcAogCi0gICAgRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FM
aXRlSURCQ3Vyc29yLmNwcAotICAgIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NR
TGl0ZUlEQlRyYW5zYWN0aW9uLmNwcAotICAgIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3Fs
aXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcAotCiAgICAgTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCiAgICAgTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuY3BwCiAKQEAgLTUxNiw4ICs1
MDYsNiBAQCBzZXQoV2ViS2l0Ml9TT1VSQ0VTCiAgICAgV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2Vi
VG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9EYXRhYmFz
ZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5jcHAKLSAgICBXZWJQcm9jZXNz
L0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuY3BwCi0gICAgV2ViUHJv
Y2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwCiAKICAg
ICBXZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCiAKQEAgLTY0Nyw3ICs2
MzUsNiBAQCBzZXQoV2ViS2l0Ml9NRVNTQUdFU19JTl9GSUxFUwogICAgIERhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MubWVzc2FnZXMuaW4KICAgICBEYXRhYmFzZVByb2Nlc3MvRGF0YWJh
c2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAKLSAgICBEYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4KICAg
ICBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub0NsaWVudC5tZXNz
YWdlcy5pbgogCiAgICAgTmV0d29ya1Byb2Nlc3MvQ3VzdG9tUHJvdG9jb2xzL0N1c3RvbVByb3Rv
Y29sTWFuYWdlci5tZXNzYWdlcy5pbgpAQCAtNzAyLDcgKzY4OSw2IEBAIHNldChXZWJLaXQyX01F
U1NBR0VTX0lOX0ZJTEVTCiAgICAgV2ViUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIu
bWVzc2FnZXMuaW4KIAogICAgIFdlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJD
b25uZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW4KLSAgICBXZWJQcm9jZXNzL0RhdGFiYXNlcy9J
bmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgogCiAgICAgV2ViUHJv
Y2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwppbmRleCBmZDY2MTI1Li5hNjgwZTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjQgQEAKIDIw
MTYtMDItMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAgICAgIFJl
bW92ZSBMZWdhY3lJREIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTA4NTQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9EYXRh
YmFzZVByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmdldE9y
Q3JlYXRlTGVnYWN5VW5pcXVlSURCRGF0YWJhc2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpEYXRhYmFzZVByb2Nlc3M6OnJlbW92ZUxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmg6CisgICAgICAg
ICogRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2Up
OgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJl
Y2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VUb1dlYlBy
b2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmVzdGFibGlzaElEQkNv
bm5lY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVRvV2ViUHJvY2Vz
c0Nvbm5lY3Rpb246OnJlbW92ZURhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24pOiBEZWxldGVk
LgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rp
b24uaDoKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25u
ZWN0aW9uLm1lc3NhZ2VzLmluOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIv
RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmg6IFJl
bW92ZWQuCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nl
c3NJREJDb25uZWN0aW9uLm1lc3NhZ2VzLmluOiBSZW1vdmVkLgorICAgICAgICAqIERhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvSURCSWRlbnRpZmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIERh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvSURCU2VyaWFsaXphdGlvbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJTZXJpYWxpemF0aW9uLmg6IFJl
bW92ZWQuCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9MZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9MZWdhY3lVbmlxdWVJREJEYXRhYmFzZS5oOiBSZW1vdmVkLgorICAgICAgICAqIERhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0xlZ2FjeVVu
aXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oOiBSZW1vdmVkLgorICAgICAgICAqIERhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25U
b0NsaWVudC5oOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NR
TGl0ZUlEQkN1cnNvci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCQ3Vyc29yLmg6IFJlbW92ZWQuCisgICAgICAgICogRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0
ZUlEQlRyYW5zYWN0aW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9zcWxpdGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmg6IFJlbW92ZWQuCisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ3Jvc3NUaHJlYWRDb3BpZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVy
Pjo6Y29weSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJREJJZGVudGlmaWVyPjo6Y29w
eSk6IERlbGV0ZWQuCisgICAgICAgICogU2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVyLmg6Cisg
ICAgICAgICogV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdl
YlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJGYWN0b3J5QmFja2VuZC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkZh
Y3RvcnlCYWNrZW5kLmg6IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMv
SW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IFdlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmg6
IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklE
QlNlcnZlckNvbm5lY3Rpb24ubWVzc2FnZXMuaW46IFJlbW92ZWQuCisgICAgICAgICogV2ViUHJv
Y2Vzcy9EYXRhYmFzZXMvV2ViRGF0YWJhc2VQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkRhdGFiYXNlUHJvdmlkZXI6OmNyZWF0ZUlEQkZhY3RvcnlCYWNrZW5kKTogRGVsZXRlZC4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL0RhdGFiYXNlcy9XZWJEYXRhYmFzZVByb3ZpZGVyLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0
aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9u
OjpkaWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYlRvRGF0
YWJhc2VQcm9jZXNzQ29ubmVjdGlvbjo6cmVnaXN0ZXJXZWJJREJTZXJ2ZXJDb25uZWN0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9u
OjpyZW1vdmVXZWJJREJTZXJ2ZXJDb25uZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0RhdGFiYXNlcy9XZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24uaDoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHA6
CisKKzIwMTYtMDItMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCiAgICAg
ICAgIE1vZGVybiBJREI6IFdlYktpdCAyIElQQyBsYXllci4KICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzgwOAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCmluZGV4IGYzMmYxN2YuLmUy
NjcxMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFz
ZVByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFz
ZVByb2Nlc3MuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNz
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiTGVn
YWN5VW5pcXVlSURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJXZWJDcm9zc1RocmVhZENvcGllci5o
IgogI2luY2x1ZGUgIldlYnNpdGVEYXRhLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Dcm9zc1RocmVh
ZFRhc2suaD4KQEAgLTk2LDI2ICs5NSw2IEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzOjpkaWRSZWNl
aXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlCiB9CiAK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLVJlZlB0cjxMZWdhY3lVbmlxdWVJREJEYXRh
YmFzZT4gRGF0YWJhc2VQcm9jZXNzOjpnZXRPckNyZWF0ZUxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNl
KGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllcikKLXsK
LSAgICBhdXRvIGFkZFJlc3VsdCA9IG1faWRiRGF0YWJhc2VzLmFkZChpZGVudGlmaWVyLCBudWxs
cHRyKTsKLQotICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIHJldHVybiBh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgUmVmUHRyPExlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlPiBkYXRhYmFzZSA9IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGUoaWRlbnRp
Zmllcik7Ci0gICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGRhdGFiYXNlLmdldCgpOwot
ICAgIHJldHVybiBkYXRhYmFzZTsKLX0KLQotdm9pZCBEYXRhYmFzZVByb2Nlc3M6OnJlbW92ZUxl
Z2FjeVVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlJiBkYXRh
YmFzZSkKLXsKLSAgICBjb25zdCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGlk
ZW50aWZpZXIgPSBkYXRhYmFzZS5pZGVudGlmaWVyKCk7Ci0gICAgQVNTRVJUKG1faWRiRGF0YWJh
c2VzLmNvbnRhaW5zKGlkZW50aWZpZXIpKTsKLQotICAgIG1faWRiRGF0YWJhc2VzLnJlbW92ZShp
ZGVudGlmaWVyKTsKLX0KLQogSURCU2VydmVyOjpJREJTZXJ2ZXImIERhdGFiYXNlUHJvY2Vzczo6
aWRiU2VydmVyKCkKIHsKICAgICBpZiAoIW1faWRiU2VydmVyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oIGIvU291cmNlL1dlYktp
dDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oCmluZGV4IGZiMWRmNGYuLmQ4Nzk2
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVBy
b2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9j
ZXNzLmgKQEAgLTI5LDggKzI5LDYgQEAKICNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIAog
I2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgotI2luY2x1ZGUgIkxlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlLmgiCi0jaW5jbHVkZSAiTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9JREJTZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VuaXF1ZUlE
QkRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC01Nyw5ICs1
NSw2IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBjb25zdCBT
dHJpbmcmIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhl
ZERhdGFiYXNlRGlyZWN0b3J5OyB9CiAKLSAgICBSZWZQdHI8TGVnYWN5VW5pcXVlSURCRGF0YWJh
c2U+IGdldE9yQ3JlYXRlTGVnYWN5VW5pcXVlSURCRGF0YWJhc2UoY29uc3QgTGVnYWN5VW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyJik7Ci0gICAgdm9pZCByZW1vdmVMZWdhY3lVbmlxdWVJREJE
YXRhYmFzZShjb25zdCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZSYpOwotCiAgICAgdm9pZCBlbnN1
cmVJbmRleGVkRGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMoY29uc3QgU3RyaW5nJik7CiAgICAg
U3RyaW5nIGFic29sdXRlSW5kZXhlZERhdGFiYXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0
aChjb25zdCBTdHJpbmcmKTsKIApAQCAtMTEzLDggKzEwOCw2IEBAIHByaXZhdGU6CiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgU3RyaW5nIG1faW5kZXhlZERhdGFiYXNlRGlyZWN0
b3J5OwogCi0gICAgSGFzaE1hcDxMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIsIFJl
ZlB0cjxMZWdhY3lVbmlxdWVJREJEYXRhYmFzZT4+IG1faWRiRGF0YWJhc2VzOwotCiAgICAgUmVm
UHRyPFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyPiBtX2lkYlNlcnZlcjsKICNlbmRpZgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dl
YlByb2Nlc3NDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9E
YXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmluZGV4IDZmMDhmMDQuLjgwM2RhY2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVRvV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC0yNiw4ICsyNiw2IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0
aW9uLmgiCiAKLSNpbmNsdWRlICJEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmgiCi0jaW5j
bHVkZSAiRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbk1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAi
RGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50LmgiCkBAIC02OSwyNyAr
NjcsNiBAQCB2b2lkIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aQogICAgICAgICAgICAgaXRlcmF0b3ItPnZh
bHVlLT5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICAKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkg
PT0gTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSkgewotICAgICAgICBJREJDb25uZWN0aW9uTWFwOjppdGVyYXRvciBiYWNrZW5kSXRl
cmF0b3IgPSBtX2lkYkNvbm5lY3Rpb25zLmZpbmQoZGVjb2Rlci5kZXN0aW5hdGlvbklEKCkpOwot
ICAgICAgICBpZiAoYmFja2VuZEl0ZXJhdG9yICE9IG1faWRiQ29ubmVjdGlvbnMuZW5kKCkpCi0g
ICAgICAgICAgICBiYWNrZW5kSXRlcmF0b3ItPnZhbHVlLT5kaWRSZWNlaXZlRGF0YWJhc2VQcm9j
ZXNzSURCQ29ubmVjdGlvbk1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0jZW5kaWYKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12
b2lkIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+JiByZXBseSkKLXsKLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJO
YW1lKCkgPT0gTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgewotICAgICAgICBJREJDb25uZWN0aW9uTWFwOjppdGVyYXRvciBiYWNr
ZW5kSXRlcmF0b3IgPSBtX2lkYkNvbm5lY3Rpb25zLmZpbmQoZGVjb2Rlci5kZXN0aW5hdGlvbklE
KCkpOwotICAgICAgICBpZiAoYmFja2VuZEl0ZXJhdG9yICE9IG1faWRiQ29ubmVjdGlvbnMuZW5k
KCkpCi0gICAgICAgICAgICBiYWNrZW5kSXRlcmF0b3ItPnZhbHVlLT5kaWRSZWNlaXZlU3luY0Rh
dGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb25NZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJl
cGx5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KICNlbmRpZgogCiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC05OCw5ICs3NSw3IEBAIHZvaWQgRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25u
ZWN0aW9uOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uCiB2b2lk
IERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9u
JikKIHsKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICAvLyBUaGUgV2ViUHJvY2Vz
cyBoYXMgZGlzY29ubmVjdGVkLCBjbG9zZSBhbGwgb2YgdGhlIGNvbm5lY3Rpb25zIGFzc29jaWF0
ZWQgd2l0aCBpdAotICAgIHdoaWxlICghbV9pZGJDb25uZWN0aW9ucy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJlbW92ZURhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24obV9pZGJDb25uZWN0aW9ucy5i
ZWdpbigpLT5rZXkpOworICAgIC8vIEZJWE1FOiAoTW9kZXJuIElEQikgVGhlIFdlYlByb2Nlc3Mg
aGFzIGRpc2Nvbm5lY3RlZCwgY2xvc2UgYWxsIG9mIHRoZSBjb25uZWN0aW9ucyBhc3NvY2lhdGVk
IHdpdGggaXQKICNlbmRpZgogfQogCkBAIC0xMTAsMjAgKzg1LDYgQEAgdm9pZCBEYXRhYmFzZVRv
V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLAogfQogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi12b2lkIERhdGFiYXNl
VG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZXN0YWJsaXNoSURCQ29ubmVjdGlvbih1aW50NjRfdCBz
ZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcikKLXsKLSAgICBSZWZQdHI8RGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbj4gaWRiQ29ubmVjdGlvbiA9IERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rp
b246OmNyZWF0ZSgqdGhpcywgc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIpOwotICAgIG1faWRi
Q29ubmVjdGlvbnMuc2V0KHNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyLCBpZGJDb25uZWN0aW9u
LnJlbGVhc2UoKSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uOjpy
ZW1vdmVEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uKHVpbnQ2NF90IHNlcnZlckNvbm5lY3Rp
b25JZGVudGlmaWVyKQotewotICAgIEFTU0VSVChtX2lkYkNvbm5lY3Rpb25zLmNvbnRhaW5zKHNl
cnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKSk7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbj4gaWRiQ29ubmVjdGlvbiA9IG1faWRiQ29ubmVjdGlvbnMudGFrZShzZXJ2
ZXJDb25uZWN0aW9uSWRlbnRpZmllcik7Ci0gICAgaWRiQ29ubmVjdGlvbi0+ZGlzY29ubmVjdGVk
RnJvbVdlYlByb2Nlc3MoKTsKLX0KLQogdm9pZCBEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rp
b246OmVzdGFibGlzaElEQkNvbm5lY3Rpb25Ub1NlcnZlcih1aW50NjRfdCBzZXJ2ZXJDb25uZWN0
aW9uSWRlbnRpZmllcikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiRGF0YWJhc2VUb1dlYlByb2Nl
c3NDb25uZWN0aW9uOjplc3RhYmxpc2hJREJDb25uZWN0aW9uVG9TZXJ2ZXIgLSAlIiBQUkl1NjQs
IHNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uaCBiL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24u
aAppbmRleCAxYzQyN2VmLi5kMjFiZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5o
CkBAIC0yNyw3ICsyNyw2IEBACiAjZGVmaW5lIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlv
bl9oCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKIAogI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CkBAIC01MCw3ICs0OSw2IEBAIHByaXZhdGU6CiAKICAgICAvLyBJUEM6
OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6Ok1l
c3NhZ2VEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+Jikgb3Zl
cnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpT
dHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgSVBDOjpQ
cm9jZXNzVHlwZSBsb2NhbFByb2Nlc3NUeXBlKCkgb3ZlcnJpZGUgeyByZXR1cm4gSVBDOjpQcm9j
ZXNzVHlwZTo6RGF0YWJhc2U7IH0KQEAgLTYyLDEzICs2MCw2IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIG92ZXJyaWRlIHsgcmV0
dXJuIDA7IH0KIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIC8vIE1lc3NhZ2Vz
IGhhbmRsZXJzIChMZWdhY3kgSURCKQotICAgIHZvaWQgZXN0YWJsaXNoSURCQ29ubmVjdGlvbih1
aW50NjRfdCBzZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcik7Ci0gICAgdm9pZCByZW1vdmVEYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uKHVpbnQ2NF90IHNlcnZlckNvbm5lY3Rpb25JZGVudGlm
aWVyKTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPERhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb24+PiBJREJDb25uZWN0aW9uTWFwOwotICAgIElEQkNvbm5lY3Rpb25N
YXAgbV9pZGJDb25uZWN0aW9uczsKLQogICAgIC8vIE1lc3NhZ2VzIGhhbmRsZXJzIChNb2Rlcm4g
SURCKQogICAgIHZvaWQgZXN0YWJsaXNoSURCQ29ubmVjdGlvblRvU2VydmVyKHVpbnQ2NF90IHNl
cnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKTsKICAgICB2b2lkIHJlbW92ZUlEQkNvbm5lY3Rpb25U
b1NlcnZlcih1aW50NjRfdCBzZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25u
ZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFi
YXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgppbmRleCAwNjEwOTNjLi43ZWIw
N2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VU
b1dlYlByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4K
QEAgLTI0LDExICsyNCw3IEBACiAKIG1lc3NhZ2VzIC0+IERhdGFiYXNlVG9XZWJQcm9jZXNzQ29u
bmVjdGlvbiBMZWdhY3lSZWNlaXZlciB7CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0g
ICAgIyBDcmVhdGVzIGEgY29ubmVjdGlvbiBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIGEgV2ViUHJv
Y2VzcyAoTGVnYWN5IElEQikKLSAgICBFc3RhYmxpc2hJREJDb25uZWN0aW9uKHVpbnQ2NF90IHNl
cnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKQotICAgIFJlbW92ZURhdGFiYXNlUHJvY2Vzc0lEQkNv
bm5lY3Rpb24odWludDY0X3Qgc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIpCi0KLSAgICAjIENy
ZWF0ZXMgYSBjb25uZWN0aW9uIGZvciBjb21tdW5pY2F0aW9uIHdpdGggYSBXZWJQcm9jZXNzIChN
b2Rlcm4gSURCKQorICAgICMgQ3JlYXRlcyBhIGNvbm5lY3Rpb24gZm9yIGNvbW11bmljYXRpb24g
d2l0aCBhIFdlYlByb2Nlc3MKICAgICBFc3RhYmxpc2hJREJDb25uZWN0aW9uVG9TZXJ2ZXIodWlu
dDY0X3Qgc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIpCiAgICAgUmVtb3ZlSURCQ29ubmVjdGlv
blRvU2VydmVyKHVpbnQ2NF90IHNlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyKQogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFi
YXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9j
ZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4ODVkMS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24u
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5oIgot
Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNT
KQotCi0jaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vz
cy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5oIgotI2luY2x1
ZGUgIklEQklkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJMZWdhY3lVbmlxdWVJREJEYXRhYmFzZS5o
IgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKLSNpbmNsdWRlICJXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZXMuaCIKLSNpbmNsdWRl
IDxXZWJDb3JlL0lEQkRhdGFiYXNlTWV0YWRhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lEQklu
ZGV4TWV0YWRhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lEQk9iamVjdFN0b3JlTWV0YWRhdGEu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lEQlNlcnZlckNvbm5lY3Rpb24uaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0luZGV4ZWREQi5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLURhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OkRhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb24oRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCB1aW50NjRfdCBzZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcikKLSAgICA6IG1fY29ubmVj
dGlvbihjb25uZWN0aW9uKQotICAgICwgbV9zZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcihzZXJ2
ZXJDb25uZWN0aW9uSWRlbnRpZmllcikKLXsKLX0KLQotRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVj
dGlvbjo6fkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24oKQotewotICAgIEFTU0VSVCghbV91
bmlxdWVJREJEYXRhYmFzZSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlv
bjo6ZGlzY29ubmVjdGVkRnJvbVdlYlByb2Nlc3MoKQotewotICAgIC8vIEl0J3MgcG9zc2libGUg
dGhhdCB0aGUgbV91bmlxdWVJREJEYXRhYmFzZSBwb2ludGVyIGhhcyBhbHJlYWR5IGJlZW4gY2xl
YXJlZAotICAgIC8vIGlmIHRoZSByZXByZXNlbnRlZCBkYXRhYmFzZSB3YXMgZGVsZXRlZCwgb3Ig
aWYgaXQgd2FzIGNsb3NlZCBiZXR3ZWVuIGRlbGV0ZQotICAgIC8vIGFuZCB0aGUgZGVsZXRlIGNh
bGxiYWNrCi0gICAgaWYgKCFtX3VuaXF1ZUlEQkRhdGFiYXNlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3VuaXF1ZUlEQkRhdGFiYXNlLT51bnJlZ2lzdGVyQ29ubmVjdGlvbigqdGhpcyk7Ci0g
ICAgbV91bmlxdWVJREJEYXRhYmFzZSA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgRGF0YWJhc2VQcm9j
ZXNzSURCQ29ubmVjdGlvbjo6ZXN0YWJsaXNoQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIGRhdGFi
YXNlTmFtZSwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcGVuaW5nT3JpZ2luLCBjb25zdCBT
ZWN1cml0eU9yaWdpbkRhdGEmIG1haW5GcmFtZU9yaWdpbikKLXsKLSAgICBtX3VuaXF1ZUlEQkRh
dGFiYXNlID0gRGF0YWJhc2VQcm9jZXNzOjpzaW5nbGV0b24oKS5nZXRPckNyZWF0ZUxlZ2FjeVVu
aXF1ZUlEQkRhdGFiYXNlKExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcihkYXRhYmFz
ZU5hbWUsIG9wZW5pbmdPcmlnaW4sIG1haW5GcmFtZU9yaWdpbikpOwotICAgIG1fdW5pcXVlSURC
RGF0YWJhc2UtPnJlZ2lzdGVyQ29ubmVjdGlvbigqdGhpcyk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbjo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHVp
bnQ2NF90IHJlcXVlc3RJRCkKLXsKLSAgICBBU1NFUlQobV91bmlxdWVJREJEYXRhYmFzZSk7Ci0K
LSAgICBMT0coSURCLCAiRGF0YWJhc2VQcm9jZXNzIGdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VN
ZXRhZGF0YSByZXF1ZXN0IElEICUiIFBSSXU2NCAiIChjb25uZWN0aW9uICVwKSIsIHJlcXVlc3RJ
RCwgdGhpcyk7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbj4gY29u
bmVjdGlvbih0aGlzKTsKLSAgICBtX3VuaXF1ZUlEQkRhdGFiYXNlLT5nZXRPckVzdGFibGlzaElE
QkRhdGFiYXNlTWV0YWRhdGEoW2Nvbm5lY3Rpb24sIHJlcXVlc3RJRF0oYm9vbCBzdWNjZXNzLCBj
b25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSkgewotICAgICAgICBjb25uZWN0aW9u
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpEaWRHZXRPckVzdGFibGlz
aElEQkRhdGFiYXNlTWV0YWRhdGEocmVxdWVzdElELCBzdWNjZXNzLCBtZXRhZGF0YSkpOwotICAg
IH0pOwotfQotCi12b2lkIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OmRlbGV0ZURhdGFi
YXNlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpCi17Ci0g
ICAgQVNTRVJUKG1fdW5pcXVlSURCRGF0YWJhc2UpOwotCi0gICAgTE9HKElEQiwgIkRhdGFiYXNl
UHJvY2VzcyBkZWxldGVEYXRhYmFzZSByZXF1ZXN0IElEICUiIFBSSXU2NCAiIChjb25uZWN0aW9u
ICVwKSIsIHJlcXVlc3RJRCwgdGhpcyk7Ci0KLSAgICBpZiAoZGF0YWJhc2VOYW1lICE9IG1fdW5p
cXVlSURCRGF0YWJhc2UtPmlkZW50aWZpZXIoKS5kYXRhYmFzZU5hbWUoKSkgewotICAgICAgICBM
T0dfRVJST1IoIlJlcXVlc3QgdG8gZGVsZXRlIGRhdGFiYXNlIG5hbWUgdGhhdCBkb2Vzbid0IG1h
dGNoIHdpdGggdGhpcyBkYXRhYmFzZSBjb25uZWN0aW9uJ3MgZGF0YWJhc2UgbmFtZSIpOwotICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpEaWREZWxldGVEYXRh
YmFzZShyZXF1ZXN0SUQsIGZhbHNlKSk7Ci0gICAgfQotCi0gICAgUmVmUHRyPERhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7Ci0gICAgbV91bmlxdWVJREJEYXRh
YmFzZS0+ZGVsZXRlRGF0YWJhc2UoW2Nvbm5lY3Rpb24sIHRoaXMsIHJlcXVlc3RJRF0oYm9vbCBz
dWNjZXNzKSB7Ci0gICAgICAgIGlmIChzdWNjZXNzKQotICAgICAgICAgICAgZGlzY29ubmVjdGVk
RnJvbVdlYlByb2Nlc3MoKTsKLQotICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpEaWREZWxldGVEYXRhYmFzZShyZXF1ZXN0SUQsIHN1Y2Nl
c3MpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpv
cGVuVHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQs
IGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJRHMsIHVpbnQ2NF90IGludE1vZGUp
Ci17Ci0gICAgQVNTRVJUKG1fdW5pcXVlSURCRGF0YWJhc2UpOwotCi0jaWZuZGVmIE5ERUJVRwot
ICAgIGNvbnN0IGNoYXIqIG1vZGVTdHJpbmcgPSBudWxscHRyOwotICAgIHN3aXRjaCAoc3RhdGlj
X2Nhc3Q8SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU+KGludE1vZGUpKSB7Ci0gICAgY2FzZSBJ
bmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6UmVhZE9ubHk6Ci0gICAgICAgIG1vZGVTdHJpbmcg
PSAicmVhZG9ubHkiOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25Nb2RlOjpSZWFkV3JpdGU6Ci0gICAgICAgIG1vZGVTdHJpbmcgPSAicmVhZHdyaXRlIjsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVy
c2lvbkNoYW5nZToKLSAgICAgICAgbW9kZVN0cmluZyA9ICJ2ZXJzaW9uY2hhbmdlIjsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgTE9HKElEQiwgIkRhdGFiYXNlUHJvY2VzcyBvcGVuVHJh
bnNhY3Rpb24gaWQgJSIgUFJJdTY0ICIgaW4gbW9kZSAnJXMnLCByZXF1ZXN0IElEICUiIFBSSXU2
NCwgdHJhbnNhY3Rpb25JRCwgbW9kZVN0cmluZywgcmVxdWVzdElEKTsKLSNlbmRpZgotCi0gICAg
aWYgKGludE1vZGUgPiBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZU1heGltdW0pIHsKLSAgICAg
ICAgc2VuZChNZXNzYWdlczo6V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6RGlkT3BlblRyYW5zYWN0
aW9uKHJlcXVlc3RJRCwgZmFsc2UpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIElu
ZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUgPSBzdGF0aWNfY2FzdDxJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZT4oaW50TW9kZSk7Ci0gICAgUmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNv
bm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7Ci0gICAgbV91bmlxdWVJREJEYXRhYmFzZS0+b3Bl
blRyYW5zYWN0aW9uKElEQklkZW50aWZpZXIoKnRoaXMsIHRyYW5zYWN0aW9uSUQpLCBvYmplY3RT
dG9yZUlEcywgbW9kZSwgW2Nvbm5lY3Rpb24sIHJlcXVlc3RJRF0oYm9vbCBzdWNjZXNzKSB7Ci0g
ICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYklEQlNlcnZlckNvbm5lY3Rpb246
OkRpZE9wZW5UcmFuc2FjdGlvbihyZXF1ZXN0SUQsIHN1Y2Nlc3MpKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpiZWdpblRyYW5zYWN0aW9uKHVpbnQ2
NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklEKQotewotICAgIEFTU0VSVChtX3Vu
aXF1ZUlEQkRhdGFiYXNlKTsKLQotICAgIExPRyhJREIsICJEYXRhYmFzZVByb2Nlc3MgYmVnaW5U
cmFuc2FjdGlvbiByZXF1ZXN0IElEICUiIFBSSXU2NCwgcmVxdWVzdElEKTsKLQotICAgIFJlZlB0
cjxEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uPiBjb25uZWN0aW9uKHRoaXMpOwotICAgIG1f
dW5pcXVlSURCRGF0YWJhc2UtPmJlZ2luVHJhbnNhY3Rpb24oSURCSWRlbnRpZmllcigqdGhpcywg
dHJhbnNhY3Rpb25JRCksIFtjb25uZWN0aW9uLCByZXF1ZXN0SURdKGJvb2wgc3VjY2Vzcykgewot
ICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJREJTZXJ2ZXJDb25uZWN0aW9u
OjpEaWRCZWdpblRyYW5zYWN0aW9uKHJlcXVlc3RJRCwgc3VjY2VzcykpOwotICAgIH0pOwotfQot
Ci12b2lkIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OmNvbW1pdFRyYW5zYWN0aW9uKHVp
bnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklEKQotewotICAgIEFTU0VSVCht
X3VuaXF1ZUlEQkRhdGFiYXNlKTsKLQotICAgIExPRyhJREIsICJEYXRhYmFzZVByb2Nlc3MgY29t
bWl0VHJhbnNhY3Rpb24gcmVxdWVzdCBJRCAlIiBQUkl1NjQsIHJlcXVlc3RJRCk7Ci0KLSAgICBS
ZWZQdHI8RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbj4gY29ubmVjdGlvbih0aGlzKTsKLSAg
ICBtX3VuaXF1ZUlEQkRhdGFiYXNlLT5jb21taXRUcmFuc2FjdGlvbihJREJJZGVudGlmaWVyKCp0
aGlzLCB0cmFuc2FjdGlvbklEKSwgW2Nvbm5lY3Rpb24sIHJlcXVlc3RJRF0oYm9vbCBzdWNjZXNz
KSB7Ci0gICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYklEQlNlcnZlckNvbm5l
Y3Rpb246OkRpZENvbW1pdFRyYW5zYWN0aW9uKHJlcXVlc3RJRCwgc3VjY2VzcykpOwotICAgIH0p
OwotfQotCi12b2lkIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OnJlc2V0VHJhbnNhY3Rp
b24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQpCi17Ci0gICAgQVNT
RVJUKG1fdW5pcXVlSURCRGF0YWJhc2UpOwotCi0gICAgTE9HKElEQiwgIkRhdGFiYXNlUHJvY2Vz
cyByZXNldFRyYW5zYWN0aW9uIHJlcXVlc3QgSUQgJSIgUFJJdTY0LCByZXF1ZXN0SUQpOwotCi0g
ICAgUmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7
Ci0gICAgbV91bmlxdWVJREJEYXRhYmFzZS0+cmVzZXRUcmFuc2FjdGlvbihJREJJZGVudGlmaWVy
KCp0aGlzLCB0cmFuc2FjdGlvbklEKSwgW2Nvbm5lY3Rpb24sIHJlcXVlc3RJRF0oYm9vbCBzdWNj
ZXNzKSB7Ci0gICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYklEQlNlcnZlckNv
bm5lY3Rpb246OkRpZFJlc2V0VHJhbnNhY3Rpb24ocmVxdWVzdElELCBzdWNjZXNzKSk7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6cm9sbGJhY2tUcmFu
c2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgdHJhbnNhY3Rpb25JRCkKLXsKLSAg
ICBBU1NFUlQobV91bmlxdWVJREJEYXRhYmFzZSk7Ci0KLSAgICBMT0coSURCLCAiRGF0YWJhc2VQ
cm9jZXNzIHJvbGxiYWNrVHJhbnNhY3Rpb24gcmVxdWVzdCBJRCAlIiBQUkl1NjQsIHJlcXVlc3RJ
RCk7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbj4gY29ubmVjdGlv
bih0aGlzKTsKLSAgICBtX3VuaXF1ZUlEQkRhdGFiYXNlLT5yb2xsYmFja1RyYW5zYWN0aW9uKElE
QklkZW50aWZpZXIoKnRoaXMsIHRyYW5zYWN0aW9uSUQpLCBbY29ubmVjdGlvbiwgcmVxdWVzdElE
XShib29sIHN1Y2Nlc3MpIHsKLSAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2Vi
SURCU2VydmVyQ29ubmVjdGlvbjo6RGlkUm9sbGJhY2tUcmFuc2FjdGlvbihyZXF1ZXN0SUQsIHN1
Y2Nlc3MpKTsKLSAgICB9KTsKLX0KLQotdm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9u
OjpyZXNldFRyYW5zYWN0aW9uU3luYyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIFBhc3NSZWZQdHI8
TWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OlJlc2V0VHJhbnNhY3Rpb25T
eW5jOjpEZWxheWVkUmVwbHk+IHBycFJlcGx5KQotewotICAgIFJlZlB0cjxNZXNzYWdlczo6RGF0
YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6UmVzZXRUcmFuc2FjdGlvblN5bmM6OkRlbGF5ZWRS
ZXBseT4gcmVwbHkocHJwUmVwbHkpOwotICAgIFJlZlB0cjxEYXRhYmFzZVByb2Nlc3NJREJDb25u
ZWN0aW9uPiBjb25uZWN0aW9uKHRoaXMpOwotICAgIG1fdW5pcXVlSURCRGF0YWJhc2UtPnJlc2V0
VHJhbnNhY3Rpb24oSURCSWRlbnRpZmllcigqdGhpcywgdHJhbnNhY3Rpb25JRCksIFtjb25uZWN0
aW9uLCByZXBseV0oYm9vbCBzdWNjZXNzKSB7Ci0gICAgICAgIHJlcGx5LT5zZW5kKHN1Y2Nlc3Mp
OwotICAgIH0pOwotfQotCi12b2lkIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OnJvbGxi
YWNrVHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgUGFzc1JlZlB0cjxNZXNz
YWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Um9sbGJhY2tUcmFuc2FjdGlvblN5
bmM6OkRlbGF5ZWRSZXBseT4gcHJwUmVwbHkpCi17Ci0gICAgUmVmUHRyPE1lc3NhZ2VzOjpEYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpSb2xsYmFja1RyYW5zYWN0aW9uU3luYzo6RGVsYXll
ZFJlcGx5PiByZXBseShwcnBSZXBseSk7Ci0gICAgUmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNv
bm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7Ci0gICAgbV91bmlxdWVJREJEYXRhYmFzZS0+cm9s
bGJhY2tUcmFuc2FjdGlvbihJREJJZGVudGlmaWVyKCp0aGlzLCB0cmFuc2FjdGlvbklEKSwgW2Nv
bm5lY3Rpb24sIHJlcGx5XShib29sIHN1Y2Nlc3MpIHsKLSAgICAgICAgcmVwbHktPnNlbmQoc3Vj
Y2Vzcyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6
Y2hhbmdlRGF0YWJhc2VWZXJzaW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2Fj
dGlvbklELCB1aW50NjRfdCBuZXdWZXJzaW9uKQotewotICAgIEFTU0VSVChtX3VuaXF1ZUlEQkRh
dGFiYXNlKTsKLQotICAgIExPRyhJREIsICJEYXRhYmFzZVByb2Nlc3MgY2hhbmdlRGF0YWJhc2VW
ZXJzaW9uIHJlcXVlc3QgSUQgJSIgUFJJdTY0ICIsIG5ldyB2ZXJzaW9uICUiIFBSSXU2NCwgcmVx
dWVzdElELCBuZXdWZXJzaW9uKTsKLQotICAgIFJlZlB0cjxEYXRhYmFzZVByb2Nlc3NJREJDb25u
ZWN0aW9uPiBjb25uZWN0aW9uKHRoaXMpOwotICAgIG1fdW5pcXVlSURCRGF0YWJhc2UtPmNoYW5n
ZURhdGFiYXNlVmVyc2lvbihJREJJZGVudGlmaWVyKCp0aGlzLCB0cmFuc2FjdGlvbklEKSwgbmV3
VmVyc2lvbiwgW2Nvbm5lY3Rpb24sIHJlcXVlc3RJRF0oYm9vbCBzdWNjZXNzKSB7Ci0gICAgICAg
IGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYklEQlNlcnZlckNvbm5lY3Rpb246OkRpZENo
YW5nZURhdGFiYXNlVmVyc2lvbihyZXF1ZXN0SUQsIHN1Y2Nlc3MpKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZSh1aW50
NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgdHJhbnNhY3Rpb25JRCwgSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YSBtZXRhZGF0YSkKLXsKLSAgICBBU1NFUlQobV91bmlxdWVJREJEYXRhYmFzZSk7Ci0KLSAg
ICBMT0coSURCLCAiRGF0YWJhc2VQcm9jZXNzIGNyZWF0ZU9iamVjdFN0b3JlIHJlcXVlc3QgSUQg
JSIgUFJJdTY0ICIsIG9iamVjdCBzdG9yZSBuYW1lICclcyciLCByZXF1ZXN0SUQsIG1ldGFkYXRh
Lm5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgUmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5l
Y3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7Ci0gICAgbV91bmlxdWVJREJEYXRhYmFzZS0+Y3JlYXRl
T2JqZWN0U3RvcmUoSURCSWRlbnRpZmllcigqdGhpcywgdHJhbnNhY3Rpb25JRCksIG1ldGFkYXRh
LCBbY29ubmVjdGlvbiwgcmVxdWVzdElEXShib29sIHN1Y2Nlc3MpIHsKLSAgICAgICAgY29ubmVj
dGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6RGlkQ3JlYXRlT2Jq
ZWN0U3RvcmUocmVxdWVzdElELCBzdWNjZXNzKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgRGF0YWJh
c2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6ZGVsZXRlT2JqZWN0U3RvcmUodWludDY0X3QgcmVxdWVz
dElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCkKLXsKLSAg
ICBBU1NFUlQobV91bmlxdWVJREJEYXRhYmFzZSk7Ci0KLSAgICBMT0coSURCLCAiRGF0YWJhc2VQ
cm9jZXNzIGRlbGV0ZU9iamVjdFN0b3JlIHJlcXVlc3QgSUQgJSIgUFJJdTY0ICIsIG9iamVjdCBz
dG9yZSBpZCAlIiBQUklpNjQsIHJlcXVlc3RJRCwgb2JqZWN0U3RvcmVJRCk7Ci0gICAgUmVmUHRy
PERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7Ci0gICAgbV91
bmlxdWVJREJEYXRhYmFzZS0+ZGVsZXRlT2JqZWN0U3RvcmUoSURCSWRlbnRpZmllcigqdGhpcywg
dHJhbnNhY3Rpb25JRCksIG9iamVjdFN0b3JlSUQsIFtjb25uZWN0aW9uLCByZXF1ZXN0SURdKGJv
b2wgc3VjY2VzcykgewotICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJREJT
ZXJ2ZXJDb25uZWN0aW9uOjpEaWREZWxldGVPYmplY3RTdG9yZShyZXF1ZXN0SUQsIHN1Y2Nlc3Mp
KTsKLSAgICB9KTsKLX0KLQotdm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpjbGVh
ck9iamVjdFN0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCBp
bnQ2NF90IG9iamVjdFN0b3JlSUQpCi17Ci0gICAgQVNTRVJUKG1fdW5pcXVlSURCRGF0YWJhc2Up
OwotCi0gICAgTE9HKElEQiwgIkRhdGFiYXNlUHJvY2VzcyBjbGVhck9iamVjdFN0b3JlIHJlcXVl
c3QgSUQgJSIgUFJJdTY0ICIsIG9iamVjdCBzdG9yZSBpZCAlIiBQUklpNjQsIHJlcXVlc3RJRCwg
b2JqZWN0U3RvcmVJRCk7Ci0gICAgUmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+
IGNvbm5lY3Rpb24odGhpcyk7Ci0gICAgbV91bmlxdWVJREJEYXRhYmFzZS0+Y2xlYXJPYmplY3RT
dG9yZShJREJJZGVudGlmaWVyKCp0aGlzLCB0cmFuc2FjdGlvbklEKSwgb2JqZWN0U3RvcmVJRCwg
W2Nvbm5lY3Rpb24sIHJlcXVlc3RJRF0oYm9vbCBzdWNjZXNzKSB7Ci0gICAgICAgIGNvbm5lY3Rp
b24tPnNlbmQoTWVzc2FnZXM6OldlYklEQlNlcnZlckNvbm5lY3Rpb246OkRpZENsZWFyT2JqZWN0
U3RvcmUocmVxdWVzdElELCBzdWNjZXNzKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbjo6Y3JlYXRlSW5kZXgodWludDY0X3QgcmVxdWVzdElELCBpbnQ2
NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCSW5kZXhN
ZXRhZGF0YSYgbWV0YWRhdGEpCi17Ci0gICAgQVNTRVJUKG1fdW5pcXVlSURCRGF0YWJhc2UpOwot
Ci0gICAgTE9HKElEQiwgIkRhdGFiYXNlUHJvY2VzcyBjcmVhdGVJbmRleCByZXF1ZXN0IElEICUi
IFBSSXU2NCAiLCBvYmplY3Qgc3RvcmUgaWQgJSIgUFJJaTY0LCByZXF1ZXN0SUQsIG9iamVjdFN0
b3JlSUQpOwotICAgIFJlZlB0cjxEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uPiBjb25uZWN0
aW9uKHRoaXMpOwotICAgIG1fdW5pcXVlSURCRGF0YWJhc2UtPmNyZWF0ZUluZGV4KElEQklkZW50
aWZpZXIoKnRoaXMsIHRyYW5zYWN0aW9uSUQpLCBvYmplY3RTdG9yZUlELCBtZXRhZGF0YSwgW2Nv
bm5lY3Rpb24sIHJlcXVlc3RJRF0oYm9vbCBzdWNjZXNzKSB7Ci0gICAgICAgIGNvbm5lY3Rpb24t
PnNlbmQoTWVzc2FnZXM6OldlYklEQlNlcnZlckNvbm5lY3Rpb246OkRpZENyZWF0ZUluZGV4KHJl
cXVlc3RJRCwgc3VjY2VzcykpOwotICAgIH0pOwotfQotCi12b2lkIERhdGFiYXNlUHJvY2Vzc0lE
QkNvbm5lY3Rpb246OmRlbGV0ZUluZGV4KHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFu
c2FjdGlvbklELCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCkKLXsKLSAg
ICBBU1NFUlQobV91bmlxdWVJREJEYXRhYmFzZSk7Ci0KLSAgICBMT0coSURCLCAiRGF0YWJhc2VQ
cm9jZXNzIGRlbGV0ZUluZGV4IHJlcXVlc3QgSUQgJSIgUFJJdTY0ICIsIG9iamVjdCBzdG9yZSBp
ZCAlIiBQUklpNjQsIHJlcXVlc3RJRCwgb2JqZWN0U3RvcmVJRCk7Ci0gICAgUmVmUHRyPERhdGFi
YXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7Ci0gICAgbV91bmlxdWVJ
REJEYXRhYmFzZS0+ZGVsZXRlSW5kZXgoSURCSWRlbnRpZmllcigqdGhpcywgdHJhbnNhY3Rpb25J
RCksIG9iamVjdFN0b3JlSUQsIGluZGV4SUQsIFtjb25uZWN0aW9uLCByZXF1ZXN0SURdKGJvb2wg
c3VjY2VzcykgewotICAgICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJREJTZXJ2
ZXJDb25uZWN0aW9uOjpEaWREZWxldGVJbmRleChyZXF1ZXN0SUQsIHN1Y2Nlc3MpKTsKLSAgICB9
KTsKLX0KLQotdm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpwdXRSZWNvcmQodWlu
dDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHZh
bHVlLCBpbnQ2NF90IHB1dE1vZGUsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJRHMsIGNv
bnN0IFZlY3RvcjxWZWN0b3I8SURCS2V5RGF0YT4+JiBpbmRleEtleXMpCi17Ci0gICAgQVNTRVJU
KG1fdW5pcXVlSURCRGF0YWJhc2UpOwotCi0gICAgTE9HKElEQiwgIkRhdGFiYXNlUHJvY2VzcyBw
dXRSZWNvcmQgcmVxdWVzdCBJRCAlIiBQUkl1NjQgIiwgb2JqZWN0IHN0b3JlIGlkICUiIFBSSWk2
NCwgcmVxdWVzdElELCBvYmplY3RTdG9yZUlEKTsKLSAgICBSZWZQdHI8RGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbj4gY29ubmVjdGlvbih0aGlzKTsKLSAgICBtX3VuaXF1ZUlEQkRhdGFiYXNl
LT5wdXRSZWNvcmQoSURCSWRlbnRpZmllcigqdGhpcywgdHJhbnNhY3Rpb25JRCksIG9iamVjdFN0
b3JlSUQsIGtleSwgdmFsdWUsIHB1dE1vZGUsIGluZGV4SURzLCBpbmRleEtleXMsIFtjb25uZWN0
aW9uLCByZXF1ZXN0SURdKGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIHVpbnQzMl90IGVycm9y
Q29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsKLSAgICAgICAgY29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6RGlkUHV0UmVjb3JkKHJlcXVl
c3RJRCwga2V5RGF0YSwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpKTsKLSAgICB9KTsKLX0KLQot
dm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpnZXRSZWNvcmQodWludDY0X3QgcmVx
dWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50
NjRfdCBpbmRleElELCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlLCBpbnQ2NF90IGN1
cnNvclR5cGUpCi17Ci0gICAgQVNTRVJUKG1fdW5pcXVlSURCRGF0YWJhc2UpOwotCi0gICAgTE9H
KElEQiwgIkRhdGFiYXNlUHJvY2VzcyBnZXRSZWNvcmQgcmVxdWVzdCBJRCAlIiBQUkl1NjQgIiwg
b2JqZWN0IHN0b3JlIGlkICUiIFBSSWk2NCwgcmVxdWVzdElELCBvYmplY3RTdG9yZUlEKTsKLSAg
ICBSZWZQdHI8RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbj4gY29ubmVjdGlvbih0aGlzKTsK
LSAgICBtX3VuaXF1ZUlEQkRhdGFiYXNlLT5nZXRSZWNvcmQoSURCSWRlbnRpZmllcigqdGhpcywg
dHJhbnNhY3Rpb25JRCksIG9iamVjdFN0b3JlSUQsIGluZGV4SUQsIGtleVJhbmdlLCBzdGF0aWNf
Y2FzdDxJbmRleGVkREI6OkN1cnNvclR5cGU+KGN1cnNvclR5cGUpLCBbY29ubmVjdGlvbiwgcmVx
dWVzdElEXShjb25zdCBJREJHZXRSZXN1bHQmIGdldFJlc3VsdCwgdWludDMyX3QgZXJyb3JDb2Rl
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgewotICAgICAgICBjb25uZWN0aW9uLT5zZW5k
KE1lc3NhZ2VzOjpXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpEaWRHZXRSZWNvcmQocmVxdWVzdElE
LCBnZXRSZXN1bHQsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKSk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Y291bnQodWludDY0X3QgcmVxdWVzdElE
LCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBp
bmRleElELCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSkKLXsKLSAgICBBU1NF
UlQobV91bmlxdWVJREJEYXRhYmFzZSk7Ci0KLSAgICBMT0coSURCLCAiRGF0YWJhc2VQcm9jZXNz
IGNvdW50IHJlcXVlc3QgSUQgJSIgUFJJdTY0ICIsIG9iamVjdCBzdG9yZSBpZCAlIiBQUklpNjQs
IHJlcXVlc3RJRCwgb2JqZWN0U3RvcmVJRCk7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbj4gY29ubmVjdGlvbih0aGlzKTsKLSAgICBtX3VuaXF1ZUlEQkRhdGFiYXNl
LT5jb3VudChJREJJZGVudGlmaWVyKCp0aGlzLCB0cmFuc2FjdGlvbklEKSwgb2JqZWN0U3RvcmVJ
RCwgaW5kZXhJRCwga2V5UmFuZ2VEYXRhLCBbY29ubmVjdGlvbiwgcmVxdWVzdElEXShpbnQ2NF90
IGNvdW50LCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7
Ci0gICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYklEQlNlcnZlckNvbm5lY3Rp
b246OkRpZENvdW50KHJlcXVlc3RJRCwgY291bnQsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKSk7
Ci0gICAgfSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6ZGVsZXRl
UmFuZ2UodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJRCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEpCi17Ci0g
ICAgQVNTRVJUKG1fdW5pcXVlSURCRGF0YWJhc2UpOwotCi0gICAgTE9HKElEQiwgIkRhdGFiYXNl
UHJvY2VzcyBkZWxldGVSYW5nZSByZXF1ZXN0IElEICUiIFBSSXU2NCAiLCBvYmplY3Qgc3RvcmUg
aWQgJSIgUFJJaTY0LCByZXF1ZXN0SUQsIG9iamVjdFN0b3JlSUQpOwotCi0gICAgUmVmUHRyPERh
dGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24odGhpcyk7Ci0gICAgbV91bmlx
dWVJREJEYXRhYmFzZS0+ZGVsZXRlUmFuZ2UoSURCSWRlbnRpZmllcigqdGhpcywgdHJhbnNhY3Rp
b25JRCksIG9iamVjdFN0b3JlSUQsIGtleVJhbmdlRGF0YSwgW2Nvbm5lY3Rpb24sIHJlcXVlc3RJ
RF0odWludDMyX3QgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkgewotICAg
ICAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpE
aWREZWxldGVSYW5nZShyZXF1ZXN0SUQsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKSk7Ci0gICAg
fSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6b3BlbkN1cnNvcih1
aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgdHJhbnNhY3Rpb25JRCwgaW50NjRfdCBvYmplY3RT
dG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIGludDY0X3QgY3Vyc29yRGlyZWN0aW9uLCBpbnQ2NF90
IGN1cnNvclR5cGUsIGludDY0X3QgdGFza1R5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5
UmFuZ2VEYXRhKQotewotICAgIEFTU0VSVChtX3VuaXF1ZUlEQkRhdGFiYXNlKTsKLQotICAgIExP
RyhJREIsICJEYXRhYmFzZVByb2Nlc3Mgb3BlbkN1cnNvciByZXF1ZXN0IElEICUiIFBSSXU2NCAi
LCBvYmplY3Qgc3RvcmUgaWQgJSIgUFJJaTY0LCByZXF1ZXN0SUQsIG9iamVjdFN0b3JlSUQpOwot
ICAgIFJlZlB0cjxEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uPiBjb25uZWN0aW9uKHRoaXMp
OwotICAgIG1fdW5pcXVlSURCRGF0YWJhc2UtPm9wZW5DdXJzb3IoSURCSWRlbnRpZmllcigqdGhp
cywgdHJhbnNhY3Rpb25JRCksIG9iamVjdFN0b3JlSUQsIGluZGV4SUQsIHN0YXRpY19jYXN0PElu
ZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uPihjdXJzb3JEaXJlY3Rpb24pLCBzdGF0aWNfY2FzdDxJ
bmRleGVkREI6OkN1cnNvclR5cGU+KGN1cnNvclR5cGUpLCBzdGF0aWNfY2FzdDxJREJEYXRhYmFz
ZUJhY2tlbmQ6OlRhc2tUeXBlPih0YXNrVHlwZSksIGtleVJhbmdlRGF0YSwgW2Nvbm5lY3Rpb24s
IHJlcXVlc3RJRF0oaW50NjRfdCBjdXJzb3JJRCwgY29uc3QgSURCS2V5RGF0YSYgcmVzdWx0S2V5
LCBjb25zdCBJREJLZXlEYXRhJiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
dmFsdWUsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsK
LSAgICAgICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEgPSB2YWx1ZSA/IElQQzo6RGF0YVJlZmVy
ZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPih2YWx1ZS0+ZGF0YSgpKSwgdmFs
dWUtPnNpemUoKSkgOiBJUEM6OkRhdGFSZWZlcmVuY2UoKTsKLSAgICAgICAgY29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6RGlkT3BlbkN1cnNvcihyZXF1
ZXN0SUQsIGN1cnNvcklELCByZXN1bHRLZXksIHByaW1hcnlLZXksIGRhdGEsIGVycm9yQ29kZSwg
ZXJyb3JNZXNzYWdlKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VQcm9jZXNzSURCQ29u
bmVjdGlvbjo6Y3Vyc29yQWR2YW5jZSh1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgY3Vyc29y
SUQsIHVpbnQ2NF90IGNvdW50KQotewotICAgIEFTU0VSVChtX3VuaXF1ZUlEQkRhdGFiYXNlKTsK
LQotICAgIExPRyhJREIsICJEYXRhYmFzZVByb2Nlc3MgY3Vyc29yQWR2YW5jZSByZXF1ZXN0IElE
ICUiIFBSSXU2NCAiLCBjdXJzb3IgaWQgJSIgUFJJaTY0LCByZXF1ZXN0SUQsIGN1cnNvcklEKTsK
LSAgICBSZWZQdHI8RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbj4gY29ubmVjdGlvbih0aGlz
KTsKLSAgICBtX3VuaXF1ZUlEQkRhdGFiYXNlLT5jdXJzb3JBZHZhbmNlKElEQklkZW50aWZpZXIo
KnRoaXMsIGN1cnNvcklEKSwgY291bnQsIFtjb25uZWN0aW9uLCByZXF1ZXN0SURdKGNvbnN0IElE
QktleURhdGEmIHJlc3VsdEtleSwgY29uc3QgSURCS2V5RGF0YSYgcHJpbWFyeUtleSwgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhID0gdmFs
dWUgPyBJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4o
dmFsdWUtPmRhdGEoKSksIHZhbHVlLT5zaXplKCkpIDogSVBDOjpEYXRhUmVmZXJlbmNlKCk7Ci0g
ICAgICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OldlYklEQlNlcnZlckNvbm5lY3Rpb246
OkRpZEFkdmFuY2VDdXJzb3IocmVxdWVzdElELCByZXN1bHRLZXksIHByaW1hcnlLZXksIGRhdGEs
IGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKSk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgRGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbjo6Y3Vyc29ySXRlcmF0ZSh1aW50NjRfdCByZXF1ZXN0SUQsIGlu
dDY0X3QgY3Vyc29ySUQsIGNvbnN0IElEQktleURhdGEmIGtleSkKLXsKLSAgICBBU1NFUlQobV91
bmlxdWVJREJEYXRhYmFzZSk7Ci0KLSAgICBMT0coSURCLCAiRGF0YWJhc2VQcm9jZXNzIGN1cnNv
ckl0ZXJhdGUgcmVxdWVzdCBJRCAlIiBQUkl1NjQgIiwgY3Vyc29yIGlkICUiIFBSSWk2NCwgcmVx
dWVzdElELCBjdXJzb3JJRCk7Ci0gICAgUmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rp
b24+IGNvbm5lY3Rpb24odGhpcyk7Ci0gICAgbV91bmlxdWVJREJEYXRhYmFzZS0+Y3Vyc29ySXRl
cmF0ZShJREJJZGVudGlmaWVyKCp0aGlzLCBjdXJzb3JJRCksIGtleSwgW2Nvbm5lY3Rpb24sIHJl
cXVlc3RJRF0oY29uc3QgSURCS2V5RGF0YSYgcmVzdWx0S2V5LCBjb25zdCBJREJLZXlEYXRhJiBw
cmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdmFsdWUsIHVpbnQzMl90IGVycm9y
Q29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsKLSAgICAgICAgSVBDOjpEYXRhUmVm
ZXJlbmNlIGRhdGEgPSB2YWx1ZSA/IElQQzo6RGF0YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQ4X3QqPih2YWx1ZS0+ZGF0YSgpKSwgdmFsdWUtPnNpemUoKSkgOiBJUEM6OkRh
dGFSZWZlcmVuY2UoKTsKLSAgICAgICAgY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSURC
U2VydmVyQ29ubmVjdGlvbjo6RGlkSXRlcmF0ZUN1cnNvcihyZXF1ZXN0SUQsIHJlc3VsdEtleSwg
cHJpbWFyeUtleSwgZGF0YSwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpKTsKLSAgICB9KTsKLX0K
LQotdm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpjbG9zZSgpCi17Ci0gICAgTE9H
KElEQiwgIkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24gY2xvc2UiKTsKLQotICAgIGRpc2Nv
bm5lY3RlZEZyb21XZWJQcm9jZXNzKCk7Ci19Ci0KLUlQQzo6Q29ubmVjdGlvbiogRGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKQotewotICAgIHJl
dHVybiBtX2Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFC
QVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDk5M2MwLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURC
Q29ubmVjdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA4ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb25faAotI2RlZmluZSBEYXRhYmFz
ZVByb2Nlc3NJREJDb25uZWN0aW9uX2gKLQotI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKLQot
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykK
LQotI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb25NZXNzYWdlcy5oIgotI2lu
Y2x1ZGUgIkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiTGVnYWN5VW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdp
bkRhdGEuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotY2xhc3MgSURCS2V5RGF0YTsKLXN0cnVjdCBJREJLZXlSYW5nZURhdGE7Ci19Ci0K
LW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rp
b247Ci0KLWNsYXNzIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291
bnRlZDxEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uPiwgcHVibGljIElQQzo6TWVzc2FnZVNl
bmRlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0
aW9uPiBjcmVhdGUoRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uJiBjb25uZWN0aW9uLCB1
aW50NjRfdCBzZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcikKLSAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24oY29ubmVjdGlvbiwg
c2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIpKTsKLSAgICB9Ci0KLSAgICB2aXJ0dWFsIH5EYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uKCk7Ci0KLSAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgot
ICAgIHZvaWQgZGlkUmVjZWl2ZURhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb25NZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImKTsKLSAgICB2b2lkIGRpZFJlY2Vp
dmVTeW5jRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbk1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpNZXNzYWdlRGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNv
ZGVyPiYpOwotCi0gICAgdm9pZCBkaXNjb25uZWN0ZWRGcm9tV2ViUHJvY2VzcygpOwotCi1wcml2
YXRlOgotICAgIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24oRGF0YWJhc2VUb1dlYlByb2Nl
c3NDb25uZWN0aW9uJiwgdWludDY0X3QgaWRiQ29ubmVjdGlvbklkZW50aWZpZXIpOwotCi0gICAg
Ly8gSVBDOjpNZXNzYWdlU2VuZGVyCi0gICAgdmlydHVhbCBJUEM6OkNvbm5lY3Rpb24qIG1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB1aW50NjRfdCBtZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fc2VydmVyQ29ubmVj
dGlvbklkZW50aWZpZXI7IH0KLQotICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCi0gICAgdm9pZCBl
c3RhYmxpc2hDb25uZWN0aW9uKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luRGF0YSYgbWFpbkZyYW1lT3JpZ2luKTsKLSAgICB2b2lkIGdldE9yRXN0YWJs
aXNoSURCRGF0YWJhc2VNZXRhZGF0YSh1aW50NjRfdCByZXF1ZXN0SUQpOwotICAgIHZvaWQgZGVs
ZXRlRGF0YWJhc2UodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFt
ZSk7Ci0gICAgdm9pZCBvcGVuVHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90
IHRyYW5zYWN0aW9uSUQsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJRHMsIHVp
bnQ2NF90IHRyYW5zYWN0aW9uTW9kZSk7Ci0gICAgdm9pZCBiZWdpblRyYW5zYWN0aW9uKHVpbnQ2
NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklEKTsKLSAgICB2b2lkIGNvbW1pdFRy
YW5zYWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklEKTsKLSAg
ICB2b2lkIHJlc2V0VHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5z
YWN0aW9uSUQpOwotICAgIHZvaWQgcm9sbGJhY2tUcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0
SUQsIGludDY0X3QgdHJhbnNhY3Rpb25JRCk7Ci0gICAgdm9pZCByZXNldFRyYW5zYWN0aW9uU3lu
YyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIFBhc3NSZWZQdHI8TWVzc2FnZXM6OkRhdGFiYXNlUHJv
Y2Vzc0lEQkNvbm5lY3Rpb246OlJlc2V0VHJhbnNhY3Rpb25TeW5jOjpEZWxheWVkUmVwbHk+KTsK
LSAgICB2b2lkIHJvbGxiYWNrVHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJhbnNhY3Rpb25JRCwg
UGFzc1JlZlB0cjxNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Um9sbGJh
Y2tUcmFuc2FjdGlvblN5bmM6OkRlbGF5ZWRSZXBseT4pOwotICAgIHZvaWQgY2hhbmdlRGF0YWJh
c2VWZXJzaW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCB1aW50
NjRfdCBuZXdWZXJzaW9uKTsKLSAgICB2b2lkIGNyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IHJl
cXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCBXZWJDb3JlOjpJREJPYmplY3RTdG9yZU1l
dGFkYXRhKTsKLSAgICB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwg
aW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpOwotICAgIHZvaWQg
Y2xlYXJPYmplY3RTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgdHJhbnNhY3Rpb25J
RCwgaW50NjRfdCBvYmplY3RTdG9yZUlEKTsKLSAgICB2b2lkIGNyZWF0ZUluZGV4KHVpbnQ2NF90
IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IG9iamVjdFN0b3JlSUQs
IGNvbnN0IFdlYkNvcmU6OklEQkluZGV4TWV0YWRhdGEmKTsKLSAgICB2b2lkIGRlbGV0ZUluZGV4
KHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IG9iamVj
dFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCk7Ci0gICAgdm9pZCBwdXRSZWNvcmQodWludDY0X3Qg
cmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwg
Y29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgdmFs
dWUsIGludDY0X3QgcHV0TW9kZSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElEcywgY29u
c3QgVmVjdG9yPFZlY3RvcjxXZWJDb3JlOjpJREJLZXlEYXRhPj4mIGluZGV4S2V5cyk7Ci0gICAg
dm9pZCBnZXRSZWNvcmQodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3JlOjpJ
REJLZXlSYW5nZURhdGEmLCBpbnQ2NF90IGN1cnNvclR5cGUpOwotCi0gICAgdm9pZCBvcGVuQ3Vy
c29yKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IG9i
amVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgaW50NjRfdCBjdXJzb3JEaXJlY3Rpb24sIGlu
dDY0X3QgY3Vyc29yVHlwZSwgaW50NjRfdCB0YXNrVHlwZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5
UmFuZ2VEYXRhJik7Ci0gICAgdm9pZCBjdXJzb3JBZHZhbmNlKHVpbnQ2NF90IHJlcXVlc3RJRCwg
aW50NjRfdCBjdXJzb3JJRCwgdWludDY0X3QgY291bnQpOwotICAgIHZvaWQgY3Vyc29ySXRlcmF0
ZSh1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgY3Vyc29ySUQsIGNvbnN0IFdlYkNvcmU6OklE
QktleURhdGEmKTsKLQotICAgIHZvaWQgY291bnQodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90
IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBj
b25zdCBXZWJDb3JlOjpJREJLZXlSYW5nZURhdGEmKTsKLSAgICB2b2lkIGRlbGV0ZVJhbmdlKHVp
bnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IG9iamVjdFN0
b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleVJhbmdlRGF0YSYga2V5UmFuZ2UpOwotCi0gICAg
dm9pZCBjbG9zZSgpOwotCi0gICAgUmVmPERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbj4g
bV9jb25uZWN0aW9uOwotICAgIHVpbnQ2NF90IG1fc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXI7
Ci0KLSAgICBSZWZQdHI8TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U+IG1fdW5pcXVlSURCRGF0YWJh
c2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKLSNlbmRpZiAvLyBEYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJh
c2VQcm9jZXNzSURCQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMjNhYTUyYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4K
KysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSMgYXJlIG1ldDoKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
LSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgotIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCi0jIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCi0jIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0jIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0j
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERB
VEFCQVNFX1BST0NFU1MpCi0KLW1lc3NhZ2VzIC0+IERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rp
b24gTGVnYWN5UmVjZWl2ZXIgewotICAgIEVzdGFibGlzaENvbm5lY3Rpb24oU3RyaW5nIGRhdGFi
YXNlTmFtZSwgc3RydWN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSBvcGVuaW5nT3JpZ2lu
LCBzdHJ1Y3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhIG1haW5GcmFtZU9yaWdpbikKLSAg
ICBHZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEodWludDY0X3QgcmVxdWVzdElEKQot
ICAgIERlbGV0ZURhdGFiYXNlKHVpbnQ2NF90IHJlcXVlc3RJRCwgU3RyaW5nIGRhdGFiYXNlTmFt
ZSkKLQotICAgIE9wZW5UcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgdHJh
bnNhY3Rpb25JRCwgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSURzLCB1aW50NjRfdCB0cmFu
c2FjdGlvbk1vZGUpCi0gICAgQmVnaW5UcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGlu
dDY0X3QgdHJhbnNhY3Rpb25JRCkKLSAgICBDb21taXRUcmFuc2FjdGlvbih1aW50NjRfdCByZXF1
ZXN0SUQsIGludDY0X3QgdHJhbnNhY3Rpb25JRCkKLSAgICBSZXNldFRyYW5zYWN0aW9uKHVpbnQ2
NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklEKQotICAgIFJvbGxiYWNrVHJhbnNh
Y3Rpb24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQpCi0KLSAgICBS
ZXNldFRyYW5zYWN0aW9uU3luYyhpbnQ2NF90IHRyYW5zYWN0aW9uSUQpIC0+IChib29sIHN1Y2Nl
c3MpIERlbGF5ZWQKLSAgICBSb2xsYmFja1RyYW5zYWN0aW9uU3luYyhpbnQ2NF90IHRyYW5zYWN0
aW9uSUQpIC0+IChib29sIHN1Y2Nlc3MpIERlbGF5ZWQKLSAgICAKLSAgICBDaGFuZ2VEYXRhYmFz
ZVZlcnNpb24odWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHVpbnQ2
NF90IG5ld1ZlcnNpb24pCi0gICAgQ3JlYXRlT2JqZWN0U3RvcmUodWludDY0X3QgcmVxdWVzdElE
LCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0cnVjdCBXZWJDb3JlOjpJREJPYmplY3RTdG9yZU1l
dGFkYXRhIG9iamVjdFN0b3JlTWV0YWRhdGEpCi0gICAgRGVsZXRlT2JqZWN0U3RvcmUodWludDY0
X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
RCkKLSAgICBDbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFu
c2FjdGlvbklELCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpOwotICAgIENyZWF0ZUluZGV4KHVpbnQ2
NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IG9iamVjdFN0b3Jl
SUQsIHN0cnVjdCBXZWJDb3JlOjpJREJJbmRleE1ldGFkYXRhIGluZGV4TWV0YWRhdGEpCi0gICAg
RGVsZXRlSW5kZXgodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElEKQotCi0gICAgUHV0UmVjb3JkKHVp
bnQ2NF90IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IG9iamVjdFN0
b3JlSUQsIFdlYkNvcmU6OklEQktleURhdGEga2V5LCBJUEM6OkRhdGFSZWZlcmVuY2UgdmFsdWUs
IGludDY0X3QgcHV0TW9kZSwgVmVjdG9yPGludDY0X3Q+IGluZGV4SURzLCBWZWN0b3I8VmVjdG9y
PFdlYkNvcmU6OklEQktleURhdGE+PiBpbmRleEtleXMpCi0gICAgR2V0UmVjb3JkKHVpbnQ2NF90
IHJlcXVlc3RJRCwgaW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IG9iamVjdFN0b3JlSUQs
IGludDY0X3QgaW5kZXhJRCwgc3RydWN0IFdlYkNvcmU6OklEQktleVJhbmdlRGF0YSBrZXlSYW5n
ZSwgaW50NjRfdCBjdXJzb3JUeXBlKQotICAgIAotICAgIE9wZW5DdXJzb3IodWludDY0X3QgcmVx
dWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50
NjRfdCBpbmRleElELCBpbnQ2NF90IGN1cnNvckRpcmVjdGlvbiwgaW50NjRfdCBjdXJzb3JUeXBl
LCBpbnQ2NF90IHRhc2tUeXBlLCBzdHJ1Y3QgV2ViQ29yZTo6SURCS2V5UmFuZ2VEYXRhIGtleVJh
bmdlKQotICAgIEN1cnNvckFkdmFuY2UodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IGN1cnNv
cklELCB1aW50NjRfdCBjb3VudCkKLSAgICBDdXJzb3JJdGVyYXRlKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgaW50NjRfdCBjdXJzb3JJRCwgV2ViQ29yZTo6SURCS2V5RGF0YSBrZXkpCi0gICAgCi0gICAg
Q291bnQodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBzdHJ1Y3QgV2ViQ29yZTo6SURCS2V5UmFu
Z2VEYXRhIGtleVJhbmdlKQotICAgIERlbGV0ZVJhbmdlKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50
NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIHN0cnVjdCBXZWJDb3Jl
OjpJREJLZXlSYW5nZURhdGEga2V5UmFuZ2UpCi0gICAgCi0gICAgQ2xvc2UoKQotfQotCi0jZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9J
REJJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERC
L0lEQklkZW50aWZpZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk3YjhiZS4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lE
QklkZW50aWZpZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBJREJJZGVudGlmaWVyX2gKLSNkZWZpbmUgSURCSWRlbnRpZmllcl9oCi0KLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCi0K
LSNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb247
Ci0KLWNsYXNzIElEQklkZW50aWZpZXIgewotcHVibGljOgotICAgIElEQklkZW50aWZpZXIoKQot
ICAgICAgICA6IG1fY29ubmVjdGlvbihudWxscHRyKQotICAgICAgICAsIG1faWRlbnRpZmllcigw
KQotICAgIHsKLSAgICB9Ci0KLSAgICBJREJJZGVudGlmaWVyKERhdGFiYXNlUHJvY2Vzc0lEQkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIGludDY0X3QgaWRlbnRpZmllcikKLSAgICAgICAgOiBtX2Nv
bm5lY3Rpb24oJmNvbm5lY3Rpb24pCi0gICAgICAgICwgbV9pZGVudGlmaWVyKGlkZW50aWZpZXIp
Ci0gICAgewotICAgIH0KLQotICAgIElEQklkZW50aWZpZXIgaXNvbGF0ZWRDb3B5KCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpczsKLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHko
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICFtX2Nvbm5lY3Rpb24gJiYgIW1faWRlbnRp
ZmllcjsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IHVpbnQ2NF90IGhhc2hDb2Rlc1syXSA9IHsgcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdD4obV9j
b25uZWN0aW9uKSwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1faWRlbnRpZmllcikgfTsKLSAgICAg
ICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFz
aENvZGVzKTsKLSAgICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSURCSWRlbnRpZmll
ciYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9jb25uZWN0aW9uID09IG90
aGVyLm1fY29ubmVjdGlvbiAmJiBtX2lkZW50aWZpZXIgPT0gb3RoZXIubV9pZGVudGlmaWVyOwot
ICAgIH0KLQotICAgIElEQklkZW50aWZpZXIoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBl
KQotICAgICAgICA6IG1fY29ubmVjdGlvbihudWxscHRyKQotICAgICAgICAsIG1faWRlbnRpZmll
cigtMSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gIW1fY29ubmVjdGlvbiAmJiBtX2lkZW50aWZp
ZXIgPT0gLTE7Ci0gICAgfQotCi0gICAgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbiYgY29u
bmVjdGlvbigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQobV9jb25uZWN0aW9uKTsKLSAg
ICAgICAgcmV0dXJuICptX2Nvbm5lY3Rpb247Ci0gICAgfQotCi0gICAgaW50NjRfdCBpZCgpIGNv
bnN0IHsgcmV0dXJuIG1faWRlbnRpZmllcjsgfQotCi1wcml2YXRlOgotICAgIC8vIElmIGFueSBt
ZW1iZXJzIGFyZSBhZGRlZCB0aGF0IGNhbm5vdCBiZSBzYWZlbHkgY29waWVkIGFjcm9zcyB0aHJl
YWRzLCBpc29sYXRlZENvcHkoKSBtdXN0IGJlIHVwZGF0ZWQuCi0gICAgRGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbiogbV9jb25uZWN0aW9uOwotICAgIGludDY0X3QgbV9pZGVudGlmaWVyOwot
fTsKLQotc3RydWN0IElEQklkZW50aWZpZXJIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBJREJJZGVudGlmaWVyJiBhKSB7IHJldHVybiBhLmhhc2goKTsgfQotICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IElEQklkZW50aWZpZXImIGEsIGNvbnN0IElEQklkZW50aWZpZXIm
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7Ci19OwotCi1zdHJ1Y3QgSURCSWRlbnRpZmllckhh
c2hUcmFpdHMgOiBXVEY6OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxJREJJZGVudGlmaWVyPiB7Ci0g
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24gPSB0cnVlOwotICAg
IHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCBJREJJZGVudGlmaWVyJiBpbmZvKSB7IHJl
dHVybiBpbmZvLmlzRW1wdHkoKTsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLW5h
bWVzcGFjZSBXVEYgewotCi10ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFdlYktpdDo6SURC
SWRlbnRpZmllcj4gOiBXZWJLaXQ6OklEQklkZW50aWZpZXJIYXNoVHJhaXRzIHsgfTsKLXRlbXBs
YXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYktpdDo6SURCSWRlbnRpZmllcj4gewotICAgIHR5
cGVkZWYgV2ViS2l0OjpJREJJZGVudGlmaWVySGFzaCBIYXNoOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV1RGCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERB
VEFCQVNFX1BST0NFU1MpCi0jZW5kaWYgLy8gSURCSWRlbnRpZmllcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lEQlNlcmlhbGl6YXRpb24u
Y3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJTZXJpYWxp
emF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTEyNWQ2YS4uMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lEQlNlcmlh
bGl6YXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSURCU2VyaWFsaXphdGlvbi5oIgotCi0jaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0KLSNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL0lEQktleURhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lEQktl
eVBhdGguaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0tleWVkQ29kaW5nLmg+Ci0KLXVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gc2VyaWFsaXplSURCS2V5UGF0aChjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoKQotewotICAg
IGF1dG8gZW5jb2RlciA9IEtleWVkRW5jb2Rlcjo6ZW5jb2RlcigpOwotICAgIGtleVBhdGguZW5j
b2RlKCplbmNvZGVyKTsKLSAgICByZXR1cm4gZW5jb2Rlci0+ZmluaXNoRW5jb2RpbmcoKTsKLX0K
LQotYm9vbCBkZXNlcmlhbGl6ZUlEQktleVBhdGgoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90
IHNpemUsIElEQktleVBhdGgmIHJlc3VsdCkKLXsKLSAgICBpZiAoIWRhdGEgfHwgIXNpemUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZGVjb2RlciA9IEtleWVkRGVjb2Rlcjo6
ZGVjb2RlcihkYXRhLCBzaXplKTsKLSAgICByZXR1cm4gSURCS2V5UGF0aDo6ZGVjb2RlKCpkZWNv
ZGVyLCByZXN1bHQpOwotfQotCi1SZWZQdHI8U2hhcmVkQnVmZmVyPiBzZXJpYWxpemVJREJLZXlE
YXRhKGNvbnN0IElEQktleURhdGEmIGtleSkKLXsKLSAgICBhdXRvIGVuY29kZXIgPSBLZXllZEVu
Y29kZXI6OmVuY29kZXIoKTsKLSAgICBrZXkuZW5jb2RlKCplbmNvZGVyKTsKLSAgICByZXR1cm4g
ZW5jb2Rlci0+ZmluaXNoRW5jb2RpbmcoKTsKLX0KLQotYm9vbCBkZXNlcmlhbGl6ZUlEQktleURh
dGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IHNpemUsIElEQktleURhdGEmIHJlc3VsdCkK
LXsKLSAgICBpZiAoIWRhdGEgfHwgIXNpemUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGF1dG8gZGVjb2RlciA9IEtleWVkRGVjb2Rlcjo6ZGVjb2RlcihkYXRhLCBzaXplKTsKLSAgICBy
ZXR1cm4gSURCS2V5RGF0YTo6ZGVjb2RlKCpkZWNvZGVyLCByZXN1bHQpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9JREJTZXJp
YWxpemF0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lE
QlNlcmlhbGl6YXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4NmY4ZC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0lE
QlNlcmlhbGl6YXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIElEQlNlcmlhbGl6YXRpb25faAotI2RlZmluZSBJREJTZXJpYWxpemF0aW9u
X2gKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotCi0jaW5jbHVkZSA8V2ViQ29yZS9T
aGFyZWRCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLWNsYXNzIElEQktleURhdGE7Ci1jbGFzcyBJREJLZXlQYXRoOwotfQotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gc2VyaWFsaXplSURC
S2V5UGF0aChjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJik7Ci1ib29sIGRlc2VyaWFsaXplSURC
S2V5UGF0aChjb25zdCB1aW50OF90KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplLCBXZWJDb3Jl
OjpJREJLZXlQYXRoJik7Ci0KLVJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IHNlcmlhbGl6
ZUlEQktleURhdGEoY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYpOwotYm9vbCBkZXNlcmlhbGl6
ZUlEQktleURhdGEoY29uc3QgdWludDhfdCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSwgV2Vi
Q29yZTo6SURCS2V5RGF0YSYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2VuZGlmIC8vIElEQlNlcmlhbGl6YXRpb25faApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9MZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL0xlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNWViYmZiOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL0xlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJMZWdhY3lVbmlxdWVJREJEYXRhYmFzZS5oIgotCi0jaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQotCi0jaW5jbHVkZSAiQXN5
bmNSZXF1ZXN0LmgiCi0jaW5jbHVkZSAiRGF0YVJlZmVyZW5jZS5oIgotI2luY2x1ZGUgIkRhdGFi
YXNlUHJvY2Vzcy5oIgotI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uaCIK
LSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VCYWNraW5n
U3RvcmVTUUxpdGUuaCIKLSNpbmNsdWRlICJXZWJDcm9zc1RocmVhZENvcGllci5oIgotI2luY2x1
ZGUgPFdlYkNvcmUvQ3Jvc3NUaHJlYWRUYXNrLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lz
dGVtLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JREJEYXRhYmFzZU1ldGFkYXRhLmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9JREJHZXRSZXN1bHQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lEQktleURhdGEu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lEQktleVJhbmdlRGF0YS5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvU2VjdXJpdHlPcmlnaW4uaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
bmFtZXNwYWNlIFdlYktpdCB7Ci0KLVN0cmluZyBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y2Fs
Y3VsYXRlQWJzb2x1dGVEYXRhYmFzZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgYWJzb2x1dGVEYXRh
YmFzZURpcmVjdG9yeSkKLXsKLSAgICByZXR1cm4gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGFi
c29sdXRlRGF0YWJhc2VEaXJlY3RvcnksICJJbmRleGVkREIuc3FsaXRlMyIpOwotfQotCi1MZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZTo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2UoY29uc3QgTGVnYWN5
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyKQotICAgIDogbV9pZGVudGlm
aWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX2FjY2VwdGluZ05ld1JlcXVlc3RzKHRydWUpCi0gICAg
LCBtX2RpZEdldE1ldGFkYXRhRnJvbUJhY2tpbmdTdG9yZShmYWxzZSkKLXsKLSAgICBtX2luTWVt
b3J5ID0gIWNhblNoYXJlRGF0YWJhc2VzKGlkZW50aWZpZXIub3BlbmluZ09yaWdpbigpLCBpZGVu
dGlmaWVyLm1haW5GcmFtZU9yaWdpbigpKTsKLSAgICBpZiAobV9pbk1lbW9yeSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gKioqKioqKioqCi0gICAgLy8gSU1QT1JUQU5UOiBEbyBub3QgY2hh
bmdlIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBpbmRleGVkIGRhdGFiYXNlcyBvbiBkaXNr
IHdpdGhvdXQgZmlyc3QgY29uc3VsdGluZyBhIHJldmlld2VyIGZyb20gQXBwbGUgKDxyZGFyOi8v
cHJvYmxlbS8xNzQ1NDcxMj4pCi0gICAgLy8gKioqKioqKioqCi0KLSAgICAvLyBFYWNoIHVuaXF1
ZSBJbmRleGVkIERhdGFiYXNlIGV4aXN0cyBpbiBhIGRpcmVjdG9yeSBuYW1lZCBmb3IgdGhlIGRh
dGFiYXNlLCB3aGljaCBleGlzdHMgaW4gYSBkaXJlY3RvcnkgcmVwcmVzZW50aW5nIGl0cyBvcGVu
aW5nIG9yaWdpbi4KLSAgICBtX2RhdGFiYXNlUmVsYXRpdmVEaXJlY3RvcnkgPSBwYXRoQnlBcHBl
bmRpbmdDb21wb25lbnQoZGF0YWJhc2VGaWxlbmFtZUlkZW50aWZpZXIoaWRlbnRpZmllci5vcGVu
aW5nT3JpZ2luKCkpLCBmaWxlbmFtZUZvckRhdGFiYXNlTmFtZSgpKTsKLQotICAgIERhdGFiYXNl
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlSW5kZXhlZERhdGFiYXNlUmVsYXRpdmVQYXRoRXhp
c3RzKG1fZGF0YWJhc2VSZWxhdGl2ZURpcmVjdG9yeSk7Ci19Ci0KLUxlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlOjp+TGVnYWN5VW5pcXVlSURCRGF0YWJhc2UoKQotewotICAgIEFTU0VSVCghbV9hY2Nl
cHRpbmdOZXdSZXF1ZXN0cyk7Ci0gICAgQVNTRVJUKG1fcGVuZGluZ01ldGFkYXRhUmVxdWVzdHMu
aXNFbXB0eSgpKTsKLX0KLQotU3RyaW5nIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpmaWxlbmFt
ZUZvckRhdGFiYXNlTmFtZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFtX2lkZW50aWZpZXIuZGF0
YWJhc2VOYW1lKCkuaXNOdWxsKCkpOwotCi0gICAgaWYgKG1faWRlbnRpZmllci5kYXRhYmFzZU5h
bWUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiJTAwIjsKLQotICAgIFN0cmluZyBmaWxl
bmFtZSA9IGVuY29kZUZvckZpbGVOYW1lKG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUoKSk7Ci0g
ICAgZmlsZW5hbWUucmVwbGFjZSgnLicsICIlMkUiKTsKLQotICAgIHJldHVybiBmaWxlbmFtZTsK
LX0KLQotU3RyaW5nIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkYXRhYmFzZUZpbGVuYW1lSWRl
bnRpZmllcihjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9yaWdpbkRhdGEpIGNvbnN0Ci17Ci0g
ICAgUmVmPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbihTZWN1cml0eU9yaWdpbjo6Y3Jl
YXRlKG9yaWdpbkRhdGEucHJvdG9jb2wsIG9yaWdpbkRhdGEuaG9zdCwgb3JpZ2luRGF0YS5wb3J0
KSk7Ci0gICAgcmV0dXJuIHNlY3VyaXR5T3JpZ2luLmdldCgpLmRhdGFiYXNlSWRlbnRpZmllcigp
OwotfQotCi1ib29sIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpjYW5TaGFyZURhdGFiYXNlcyhj
b25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3Jp
Z2luRGF0YSYgbWFpbkZyYW1lT3JpZ2luKSBjb25zdAotewotICAgIC8vIEZvciBub3csIGFuIG9y
aWdpbidzIGRhdGFiYXNlIGFjY2VzcyBpcyBwcmVkaWNhdGVkIG9uIGVxdWFsaXR5IHdpdGggdGhl
IG90aGVyIG9yaWdpbi4KLSAgICAvLyBXZSBtaWdodCBuZWVkIHRvIG1ha2UgdGhpcyBtb3JlIG51
YW5jZWQgbGF0ZXIuCi0gICAgcmV0dXJuIG9wZW5pbmdPcmlnaW4gPT0gbWFpbkZyYW1lT3JpZ2lu
OwotfQotCi12b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpyZWdpc3RlckNvbm5lY3Rpb24o
RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbiYgY29ubmVjdGlvbikKLXsKLSAgICBBU1NFUlQo
IW1fY29ubmVjdGlvbnMuY29udGFpbnMoJmNvbm5lY3Rpb24pKTsKLSAgICBtX2Nvbm5lY3Rpb25z
LmFkZCgmY29ubmVjdGlvbik7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OnVu
cmVnaXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24pCi17Ci0gICAgQVNTRVJUKG1fY29ubmVjdGlvbnMuY29udGFpbnMoJmNvbm5lY3Rpb24pKTsK
LSAgICByZXNldEFsbFRyYW5zYWN0aW9ucyhjb25uZWN0aW9uKTsKLSAgICBtX2Nvbm5lY3Rpb25z
LnJlbW92ZSgmY29ubmVjdGlvbik7Ci0KLSAgICBpZiAobV9jb25uZWN0aW9ucy5pc0VtcHR5KCkg
JiYgbV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3MuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNo
dXRkb3duKExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBlOjpOb3JtYWxTaHV0ZG93
bik7Ci0gICAgICAgIERhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTGVnYWN5VW5p
cXVlSURCRGF0YWJhc2UoKnRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJREJE
YXRhYmFzZTo6c2h1dGRvd24oTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGUgdHlw
ZSkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFtX2FjY2Vw
dGluZ05ld1JlcXVlc3RzKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FjY2VwdGluZ05ld1Jl
cXVlc3RzID0gZmFsc2U7Ci0KLSAgICAvLyBCYWxhbmNlZCBieSBhbiBhZG9wdFJlZiBpbiA6OmRp
ZFNodXRkb3duQmFja2luZ1N0b3JlKCkKLSAgICByZWYoKTsKLQotICAgIHsKLSAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9kYXRhYmFzZVRhc2tNdXRleCk7Ci0gICAgICAgIG1fZGF0YWJhc2VU
YXNrcy5jbGVhcigpOwotICAgIH0KLQotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OnNodXRkb3duQmFja2lu
Z1N0b3JlLCB0eXBlLCBhYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5KCkpLCBEYXRhYmFzZVRhc2tU
eXBlOjpTaHV0ZG93bik7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OnNodXRk
b3duQmFja2luZ1N0b3JlKExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBlIHR5cGUs
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7Ci0KLSAgICBpZiAo
dHlwZSA9PSBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlwZTo6RGVsZXRlU2h1dGRv
d24pIHsKLSAgICAgICAgU3RyaW5nIGRiRmlsZW5hbWUgPSBMZWdhY3lVbmlxdWVJREJEYXRhYmFz
ZTo6Y2FsY3VsYXRlQWJzb2x1dGVEYXRhYmFzZUZpbGVuYW1lKGRhdGFiYXNlRGlyZWN0b3J5KTsK
LSAgICAgICAgTE9HKElEQiwgIkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpzaHV0ZG93bkJhY2tp
bmdTdG9yZSBkZWxldGluZyBmaWxlICclcycgb24gZGlzayIsIGRiRmlsZW5hbWUudXRmOCgpLmRh
dGEoKSk7Ci0gICAgICAgIGRlbGV0ZUZpbGUoZGJGaWxlbmFtZSk7Ci0gICAgICAgIGRlbGV0ZUVt
cHR5RGlyZWN0b3J5KGRhdGFiYXNlRGlyZWN0b3J5KTsKLSAgICB9Ci0KLSAgICBwb3N0TWFpblRo
cmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0
YWJhc2U6OmRpZFNodXRkb3duQmFja2luZ1N0b3JlLCB0eXBlKSwgRGF0YWJhc2VUYXNrVHlwZTo6
U2h1dGRvd24pOwotfQotCi12b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRTaHV0ZG93
bkJhY2tpbmdTdG9yZShMZWdhY3lVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlwZSB0eXBlKQot
ewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICAvLyBCYWxhbmNlZCBieSBh
IHJlZiBpbiA6OnNodXRkb3duKCkKLSAgICBSZWZQdHI8TGVnYWN5VW5pcXVlSURCRGF0YWJhc2U+
IHByb3RlY3RvcihhZG9wdFJlZih0aGlzKSk7Ci0KLSAgICAvLyBFbXB0eSBvdXQgcmVtYWluaW5n
IG1haW4gdGhyZWFkIHRhc2tzLgotICAgIHdoaWxlIChwZXJmb3JtTmV4dE1haW5UaHJlYWRUYXNr
KCkpIHsKLSAgICB9Ci0KLSAgICAvLyBObyBtb3JlIHJlcXVlc3RzIHdpbGwgYmUgaGFuZGxlZCwg
c28gYWJvcnQgYWxsIG91dHN0YW5kaW5nIHJlcXVlc3RzLgotICAgIGZvciAoY29uc3QgYXV0byYg
cmVxdWVzdCA6IG1fcGVuZGluZ01ldGFkYXRhUmVxdWVzdHMpCi0gICAgICAgIHJlcXVlc3QtPnJl
cXVlc3RBYm9ydGVkKCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiByZXF1ZXN0IDogbV9wZW5kaW5n
VHJhbnNhY3Rpb25SZXF1ZXN0cy52YWx1ZXMoKSkKLSAgICAgICAgcmVxdWVzdC0+cmVxdWVzdEFi
b3J0ZWQoKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJlcXVlc3QgOiBtX3BlbmRpbmdEYXRhYmFz
ZVRhc2tzLnZhbHVlcygpKQotICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0QWJvcnRlZCgpOwotCi0g
ICAgbV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0cy5jbGVhcigpOwotICAgIG1fcGVuZGluZ1RyYW5z
YWN0aW9uUmVxdWVzdHMuY2xlYXIoKTsKLSAgICBtX3BlbmRpbmdEYXRhYmFzZVRhc2tzLmNsZWFy
KCk7Ci0KLSAgICBpZiAobV9wZW5kaW5nU2h1dGRvd25UYXNrKQotICAgICAgICBtX3BlbmRpbmdT
aHV0ZG93blRhc2stPmNvbXBsZXRlUmVxdWVzdCh0eXBlKTsKLQotICAgIG1fcGVuZGluZ1NodXRk
b3duVGFzayA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRl
bGV0ZURhdGFiYXNlKHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFjaykK
LXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFtX2FjY2VwdGlu
Z05ld1JlcXVlc3RzKSB7Ci0gICAgICAgIC8vIFNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSBzaHV0
ZG93biB0aGlzIGRhdGFiYXNlLCBzbyB3ZSBjYW4ndCByZXF1ZXN0IGEgZGVsZXRlLgotICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFtzdWNjZXNzQ2FsbGJhY2tdIHsKLSAgICAgICAgICAgIHN1Y2Nl
c3NDYWxsYmFjayhmYWxzZSk7Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgUmVmUHRyPExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlPiBwcm90ZWN0b3IodGhpcyk7Ci0g
ICAgbV9wZW5kaW5nU2h1dGRvd25UYXNrID0gQXN5bmNSZXF1ZXN0SW1wbDxMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZVNodXRkb3duVHlwZT46OmNyZWF0ZShbdGhpcywgcHJvdGVjdG9yLCBzdWNjZXNz
Q2FsbGJhY2tdKExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBlIHR5cGUpIHsKLSAg
ICAgICAgLy8gSWYgdGhlIHNodXRkb3duIGp1c3QgY29tcGxldGVkIHdhcyBhIERlbGV0ZSBzaHV0
ZG93biB0aGVuIHdlIHN1Y2NlZWRlZC4KLSAgICAgICAgLy8gSWYgbm90IHJlcG9ydCBmYWlsdXJl
IGluc3RlYWQgb2YgdHJ5aW5nIGFnYWluLgotICAgICAgICBzdWNjZXNzQ2FsbGJhY2sodHlwZSA9
PSBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlwZTo6RGVsZXRlU2h1dGRvd24pOwot
ICAgIH0sIFt0aGlzLCBwcm90ZWN0b3IsIHN1Y2Nlc3NDYWxsYmFja10gewotICAgICAgICBzdWNj
ZXNzQ2FsbGJhY2soZmFsc2UpOwotICAgIH0pOwotCi0gICAgc2h1dGRvd24oTGVnYWN5VW5pcXVl
SURCRGF0YWJhc2VTaHV0ZG93blR5cGU6OkRlbGV0ZVNodXRkb3duKTsKLX0KLQotdm9pZCBMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZTo6Z2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHN0
ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCwgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYpPiBjb21w
bGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAg
IGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykgewotICAgICAgICBjb21wbGV0aW9uQ2FsbGJh
Y2soZmFsc2UsIElEQkRhdGFiYXNlTWV0YWRhdGEoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IHJldHJpZXZlZCBtZXRhZGF0YSBmcm9tIHRoZSBi
YWNraW5nIHN0b3JlLCByZXR1cm4gaXQgbm93LgotICAgIGlmIChtX2RpZEdldE1ldGFkYXRhRnJv
bUJhY2tpbmdTdG9yZSkgewotICAgICAgICBpZiAobV9tZXRhZGF0YSkKLSAgICAgICAgICAgIGNv
bXBsZXRpb25DYWxsYmFjayh0cnVlLCAqbV9tZXRhZGF0YSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhmYWxzZSwgSURCRGF0YWJhc2VNZXRhZGF0YSgpKTsK
LQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3Qg
dW5hbnN3ZXJlZCBtZXRhZGF0YSByZXF1ZXN0LCB0aGVuIGxhdGVyIHdlIG5lZWQgdG8KLSAgICAv
LyBwb3N0IGEgdGFzayB0byBvcGVuIHRoZSBiYWNraW5nIHN0b3JlIGFuZCBnZXQgbWV0YWRhdGEu
Ci0gICAgYm9vbCBzaG91bGRPcGVuQmFja2luZ1N0b3JlID0gbV9wZW5kaW5nTWV0YWRhdGFSZXF1
ZXN0cy5pc0VtcHR5KCk7Ci0KLSAgICAvLyBUaGVuIHJlbWVtYmVyIHRoaXMgbWV0YWRhdGEgcmVx
dWVzdCB0byBiZSBhbnN3ZXJlZCBsYXRlci4KLSAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1
ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDw+OjpjcmVhdGUoW2NvbXBsZXRpb25DYWxsYmFjaywgdGhp
c10gewotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2soISFtX21ldGFkYXRhLCBtX21ldGFkYXRh
ID8gKm1fbWV0YWRhdGEgOiBJREJEYXRhYmFzZU1ldGFkYXRhKCkpOwotICAgIH0sIFtjb21wbGV0
aW9uQ2FsbGJhY2tdIHsKLSAgICAgICAgLy8gVGhlIGJvb2xlYW4gZmxhZyB0byB0aGUgY29tcGxl
dGlvbiBjYWxsYmFjayByZXByZXNlbnRzIHdoZXRoZXIgdGhlCi0gICAgICAgIC8vIGF0dGVtcHQg
dG8gZ2V0L2VzdGFibGlzaCBtZXRhZGF0YSBzdWNjZWVkZWQgb3IgZmFpbGVkLgotICAgICAgICAv
LyBTaW5jZSB3ZSdyZSBhYm9ydGluZyB0aGUgYXR0ZW1wdCwgaXQgZmFpbGVkLCBzbyB3ZSBhbHdh
eXMgcGFzcyBpbiBmYWxzZS4KLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKGZhbHNlLCBJREJE
YXRhYmFzZU1ldGFkYXRhKCkpOwotICAgIH0pOwotCi0gICAgbV9wZW5kaW5nTWV0YWRhdGFSZXF1
ZXN0cy5hcHBlbmQocmVxdWVzdC5yZWxlYXNlKCkpOwotCi0gICAgaWYgKHNob3VsZE9wZW5CYWNr
aW5nU3RvcmUpCi0gICAgICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmVBbmRSZWFk
TWV0YWRhdGEsIG1faWRlbnRpZmllciwgYWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSgpKSk7Ci19
Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNraW5nU3RvcmVBbmRSZWFk
TWV0YWRhdGEoY29uc3QgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVCghbV9iYWNraW5nU3RvcmUpOwotCi0gICAgaWYg
KG1faW5NZW1vcnkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJTdXBwb3J0IGZvciBpbi1tZW1vcnkg
ZGF0YWJhc2VzIG5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fYmFja2luZ1N0b3JlID0gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxp
dGU6OmNyZWF0ZShpZGVudGlmaWVyLCBkYXRhYmFzZURpcmVjdG9yeSk7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IG1ldGFkYXRhID0gbV9iYWNraW5nU3RvcmUtPmdl
dE9yRXN0YWJsaXNoTWV0YWRhdGEoKTsKLQotICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkT3BlbkJh
Y2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YSwgbWV0YWRhdGEgPyAqbWV0YWRhdGEgOiBJREJEYXRh
YmFzZU1ldGFkYXRhKCksICEhbWV0YWRhdGEpKTsKLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkT3BlbkJhY2tpbmdTdG9yZUFuZFJlYWRNZXRhZGF0YShjb25zdCBJREJEYXRh
YmFzZU1ldGFkYXRhJiBtZXRhZGF0YSwgYm9vbCBzdWNjZXNzKQotewotICAgIEFTU0VSVChSdW5M
b29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKCFtX21ldGFkYXRhKTsKLQotICAgIG1fZGlkR2V0
TWV0YWRhdGFGcm9tQmFja2luZ1N0b3JlID0gdHJ1ZTsKLQotICAgIGlmIChzdWNjZXNzKQotICAg
ICAgICBtX21ldGFkYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxJREJEYXRhYmFzZU1ldGFkYXRhPiht
ZXRhZGF0YSk7Ci0KLSAgICB3aGlsZSAoIW1fcGVuZGluZ01ldGFkYXRhUmVxdWVzdHMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBtX3BlbmRpbmdN
ZXRhZGF0YVJlcXVlc3RzLnRha2VGaXJzdCgpOwotICAgICAgICByZXF1ZXN0LT5jb21wbGV0ZVJl
cXVlc3QoKTsKLSAgICB9Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5U
cmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNv
bnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJRHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rp
b25Nb2RlIG1vZGUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFjaykK
LXsKLSAgICBwb3N0VHJhbnNhY3Rpb25PcGVyYXRpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyLCBj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6b3Bl
bkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0
b3JlSURzLCBtb2RlKSwgc3VjY2Vzc0NhbGxiYWNrKTsKLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZTo6YmVnaW5UcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFj
aykKLXsKLSAgICBwb3N0VHJhbnNhY3Rpb25PcGVyYXRpb24odHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6
YmVnaW5CYWNraW5nU3RvcmVUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyKSwgc3Vj
Y2Vzc0NhbGxiYWNrKTsKLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y29tbWl0
VHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spCi17Ci0gICAgcG9zdFRy
YW5zYWN0aW9uT3BlcmF0aW9uKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNvbW1pdEJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbklkZW50aWZpZXIpLCBzdWNjZXNzQ2FsbGJhY2spOwot
fQotCi12b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpyZXNldFRyYW5zYWN0aW9uKGNvbnN0
IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3RkOjpmdW5jdGlvbjx2b2lk
IChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKQotewotICAgIHBvc3RUcmFuc2FjdGlvbk9wZXJhdGlv
bih0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxl
Z2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpyZXNldEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFu
c2FjdGlvbklkZW50aWZpZXIpLCBzdWNjZXNzQ2FsbGJhY2spOwotfQotCi12b2lkIExlZ2FjeVVu
aXF1ZUlEQkRhdGFiYXNlOjpyb2xsYmFja1RyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vz
c0NhbGxiYWNrKQotewotICAgIHBvc3RUcmFuc2FjdGlvbk9wZXJhdGlvbih0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlOjpyb2xsYmFja0JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbklkZW50
aWZpZXIpLCBzdWNjZXNzQ2FsbGJhY2spOwotfQotCi12b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlOjpwb3N0VHJhbnNhY3Rpb25PcGVyYXRpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiB0YXNrLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spCi17Ci0gICAgQVNTRVJU
KFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykg
ewotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKG1fcGVuZGluZ1RyYW5zYWN0aW9uUmVxdWVzdHMuY29udGFpbnModHJhbnNh
Y3Rpb25JZGVudGlmaWVyKSkgewotICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHRpbmcgdG8gcXVl
dWUgYW4gb3BlcmF0aW9uIGZvciBhIHRyYW5zYWN0aW9uIHRoYXQgYWxyZWFkeSBoYXMgYW4gb3Bl
cmF0aW9uIHBlbmRpbmcuIEVhY2ggdHJhbnNhY3Rpb24gc2hvdWxkIG9ubHkgaGF2ZSBvbmUgb3Bl
cmF0aW9uIHBlbmRpbmcgYXQgYSB0aW1lLiIpOwotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZmFs
c2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcG9zdERhdGFiYXNlVGFzayhXVEZN
b3ZlKHRhc2spKTsKLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3luY1Jl
cXVlc3RJbXBsPGJvb2w+OjpjcmVhdGUoW3N1Y2Nlc3NDYWxsYmFja10oYm9vbCBzdWNjZXNzKSB7
Ci0gICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzKTsKLSAgICB9LCBbc3VjY2Vzc0NhbGxi
YWNrXSB7Ci0gICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhmYWxzZSk7Ci0gICAgfSk7Ci0KLSAgICBt
X3BlbmRpbmdUcmFuc2FjdGlvblJlcXVlc3RzLmFkZCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIHJl
cXVlc3QucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlk
Q29tcGxldGVUcmFuc2FjdGlvbk9wZXJhdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIGJvb2wgc3VjY2VzcykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNN
YWluKCkpOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9IG1fcGVuZGluZ1Ry
YW5zYWN0aW9uUmVxdWVzdHMudGFrZSh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwotCi0gICAgaWYg
KHJlcXVlc3QpCi0gICAgICAgIHJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdChzdWNjZXNzKTsKLQot
ICAgIGlmIChtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5jb250YWlucyh0cmFuc2FjdGlv
bklkZW50aWZpZXIpKQotICAgICAgICBmaW5hbGl6ZVJvbGxiYWNrKHRyYW5zYWN0aW9uSWRlbnRp
Zmllcik7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNoYW5nZURhdGFiYXNl
VmVyc2lvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIHVpbnQ2
NF90IG5ld1ZlcnNpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFj
aykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFtX2FjY2Vw
dGluZ05ld1JlcXVlc3RzKSB7Ci0gICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhmYWxzZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB1aW50NjRfdCBvbGRWZXJzaW9uID0gbV9tZXRhZGF0
YS0+dmVyc2lvbjsKLSAgICBtX21ldGFkYXRhLT52ZXJzaW9uID0gbmV3VmVyc2lvbjsKLQotICAg
IFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3luY1JlcXVlc3RJbXBsPGJvb2w+Ojpj
cmVhdGUoW3RoaXMsIG9sZFZlcnNpb24sIHN1Y2Nlc3NDYWxsYmFja10oYm9vbCBzdWNjZXNzKSB7
Ci0gICAgICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgICAgIG1fbWV0YWRhdGEtPnZlcnNpb24g
PSBvbGRWZXJzaW9uOwotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soc3VjY2Vzcyk7Ci0gICAgfSwg
W3RoaXMsIG9sZFZlcnNpb24sIHN1Y2Nlc3NDYWxsYmFja10gewotICAgICAgICBtX21ldGFkYXRh
LT52ZXJzaW9uID0gb2xkVmVyc2lvbjsKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNlKTsK
LSAgICB9KTsKLQotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3QtPnJlcXVlc3RJRCgp
OwotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJRCwgcmVxdWVzdC5yZWxl
YXNlKCkpOwotCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRo
aXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y2hhbmdlRGF0YWJhc2VWZXJzaW9uSW5CYWNr
aW5nU3RvcmUsIHJlcXVlc3RJRCwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBuZXdWZXJzaW9uKSk7
Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZENoYW5nZURhdGFiYXNlVmVy
c2lvbih1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2VzcykKLXsKLSAgICBkaWRDb21wbGV0
ZUJvb2xSZXF1ZXN0KHJlcXVlc3RJRCwgc3VjY2Vzcyk7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVl
SURCRGF0YWJhc2U6OmRpZENyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9v
bCBzdWNjZXNzKQotewotICAgIGRpZENvbXBsZXRlQm9vbFJlcXVlc3QocmVxdWVzdElELCBzdWNj
ZXNzKTsKLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlT2JqZWN0
U3RvcmUodWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MpCi17Ci0gICAgZGlkQ29tcGxl
dGVCb29sUmVxdWVzdChyZXF1ZXN0SUQsIHN1Y2Nlc3MpOwotfQotCi12b2lkIExlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRDbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9v
bCBzdWNjZXNzKQotewotICAgIGRpZENvbXBsZXRlQm9vbFJlcXVlc3QocmVxdWVzdElELCBzdWNj
ZXNzKTsKLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ3JlYXRlSW5kZXgo
dWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MpCi17Ci0gICAgZGlkQ29tcGxldGVCb29s
UmVxdWVzdChyZXF1ZXN0SUQsIHN1Y2Nlc3MpOwotfQotCi12b2lkIExlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWREZWxldGVJbmRleCh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2VzcykK
LXsKLSAgICBkaWRDb21wbGV0ZUJvb2xSZXF1ZXN0KHJlcXVlc3RJRCwgc3VjY2Vzcyk7Ci19Ci0K
LXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZENvbXBsZXRlQm9vbFJlcXVlc3QodWlu
dDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MpCi17Ci0gICAgbV9wZW5kaW5nRGF0YWJhc2VU
YXNrcy50YWtlKHJlcXVlc3RJRCkuZ2V0KCkuY29tcGxldGVSZXF1ZXN0KHN1Y2Nlc3MpOwotfQot
Ci12b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJ
REJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3Jl
TWV0YWRhdGEmIG1ldGFkYXRhLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2Fs
bGJhY2spCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICghbV9h
Y2NlcHRpbmdOZXdSZXF1ZXN0cykgewotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZmFsc2UpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKCFtX21ldGFkYXRhLT5vYmplY3RT
dG9yZXMuY29udGFpbnMobWV0YWRhdGEuaWQpKTsKLSAgICBtX21ldGFkYXRhLT5vYmplY3RTdG9y
ZXMuc2V0KG1ldGFkYXRhLmlkLCBtZXRhZGF0YSk7Ci0gICAgaW50NjRfdCBhZGRlZE9iamVjdFN0
b3JlSUQgPSBtZXRhZGF0YS5pZDsKLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3Qg
PSBBc3luY1JlcXVlc3RJbXBsPGJvb2w+OjpjcmVhdGUoW3RoaXMsIGFkZGVkT2JqZWN0U3RvcmVJ
RCwgc3VjY2Vzc0NhbGxiYWNrXShib29sIHN1Y2Nlc3MpIHsKLSAgICAgICAgaWYgKCFzdWNjZXNz
KQotICAgICAgICAgICAgbV9tZXRhZGF0YS0+b2JqZWN0U3RvcmVzLnJlbW92ZShhZGRlZE9iamVj
dFN0b3JlSUQpOwotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soc3VjY2Vzcyk7Ci0gICAgfSwgW3Ro
aXMsIGFkZGVkT2JqZWN0U3RvcmVJRCwgc3VjY2Vzc0NhbGxiYWNrXSB7Ci0gICAgICAgIG1fbWV0
YWRhdGEtPm9iamVjdFN0b3Jlcy5yZW1vdmUoYWRkZWRPYmplY3RTdG9yZUlEKTsKLSAgICAgICAg
c3VjY2Vzc0NhbGxiYWNrKGZhbHNlKTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90IHJlcXVlc3RJ
RCA9IHJlcXVlc3QtPnJlcXVlc3RJRCgpOwotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MuYWRk
KHJlcXVlc3RJRCwgcmVxdWVzdC5yZWxlYXNlKCkpOwotCi0gICAgcG9zdERhdGFiYXNlVGFzayhj
cmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y3Jl
YXRlT2JqZWN0U3RvcmVJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIG1ldGFkYXRhKSk7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRl
bGV0ZU9iamVjdFN0b3JlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmll
ciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNj
ZXNzQ2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlm
ICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykgewotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZmFs
c2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fbWV0YWRhdGEtPm9i
amVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlEKSk7Ci0gICAgSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YSBtZXRhZGF0YSA9IG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy50YWtlKG9iamVjdFN0
b3JlSUQpOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9IEFzeW5jUmVxdWVz
dEltcGw8Ym9vbD46OmNyZWF0ZShbdGhpcywgbWV0YWRhdGEsIHN1Y2Nlc3NDYWxsYmFja10oYm9v
bCBzdWNjZXNzKSB7Ci0gICAgICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgICAgIG1fbWV0YWRh
dGEtPm9iamVjdFN0b3Jlcy5zZXQobWV0YWRhdGEuaWQsIG1ldGFkYXRhKTsKLSAgICAgICAgc3Vj
Y2Vzc0NhbGxiYWNrKHN1Y2Nlc3MpOwotICAgIH0sIFt0aGlzLCBtZXRhZGF0YSwgc3VjY2Vzc0Nh
bGxiYWNrXSB7Ci0gICAgICAgIG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5zZXQobWV0YWRhdGEu
aWQsIG1ldGFkYXRhKTsKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNlKTsKLSAgICB9KTsK
LQotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3QtPnJlcXVlc3RJRCgpOwotICAgIG1f
cGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJRCwgcmVxdWVzdC5yZWxlYXNlKCkpOwot
Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmVJbkJhY2tpbmdTdG9yZSwgcmVx
dWVzdElELCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3JlSUQpKTsKLX0KLQotdm9p
ZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZShjb25zdCBJREJJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgc3Rk
OjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKQotewotICAgIEFTU0VSVChS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIW1fYWNjZXB0aW5nTmV3UmVxdWVzdHMpIHsK
LSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEFTU0VSVChtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMuY29udGFpbnMob2JqZWN0U3Rv
cmVJRCkpOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9IEFzeW5jUmVxdWVz
dEltcGw8Ym9vbD46OmNyZWF0ZShbdGhpcywgc3VjY2Vzc0NhbGxiYWNrXShib29sIHN1Y2Nlc3Mp
IHsKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3MpOwotICAgIH0sIFt0aGlzLCBzdWNj
ZXNzQ2FsbGJhY2tdIHsKLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNlKTsKLSAgICB9KTsK
LQotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3QtPnJlcXVlc3RJRCgpOwotICAgIG1f
cGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJRCwgcmVxdWVzdC5yZWxlYXNlKCkpOwot
Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZTo6Y2xlYXJPYmplY3RTdG9yZUluQmFja2luZ1N0b3JlLCByZXF1
ZXN0SUQsIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJRCkpOwotfQotCi12b2lk
IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpjcmVhdGVJbmRleChjb25zdCBJREJJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSYgbWV0YWRhdGEsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nl
c3NDYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYg
KCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKSB7Ci0gICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhmYWxz
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9tZXRhZGF0YS0+b2Jq
ZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSUQpKTsKLSAgICBBU1NFUlQoIW1fbWV0YWRh
dGEtPm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJRCkuaW5kZXhlcy5jb250YWlucyhtZXRh
ZGF0YS5pZCkpOwotICAgIG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJ
RCkuaW5kZXhlcy5zZXQobWV0YWRhdGEuaWQsIG1ldGFkYXRhKTsKLSAgICBpbnQ2NF90IGFkZGVk
SW5kZXhJRCA9IG1ldGFkYXRhLmlkOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVz
dCA9IEFzeW5jUmVxdWVzdEltcGw8Ym9vbD46OmNyZWF0ZShbdGhpcywgb2JqZWN0U3RvcmVJRCwg
YWRkZWRJbmRleElELCBzdWNjZXNzQ2FsbGJhY2tdKGJvb2wgc3VjY2VzcykgewotICAgICAgICBp
ZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmVGaW5kID0gbV9tZXRh
ZGF0YS0+b2JqZWN0U3RvcmVzLmZpbmQob2JqZWN0U3RvcmVJRCk7Ci0gICAgICAgICAgICBpZiAo
b2JqZWN0U3RvcmVGaW5kICE9IG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5lbmQoKSkKLSAgICAg
ICAgICAgICAgICBvYmplY3RTdG9yZUZpbmQtPnZhbHVlLmluZGV4ZXMucmVtb3ZlKGFkZGVkSW5k
ZXhJRCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3MpOwotICAg
IH0sIFt0aGlzLCBvYmplY3RTdG9yZUlELCBhZGRlZEluZGV4SUQsIHN1Y2Nlc3NDYWxsYmFja10g
ewotICAgICAgICBhdXRvIG9iamVjdFN0b3JlRmluZCA9IG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jl
cy5maW5kKG9iamVjdFN0b3JlSUQpOwotICAgICAgICBpZiAob2JqZWN0U3RvcmVGaW5kICE9IG1f
bWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5lbmQoKSkKLSAgICAgICAgICAgIG9iamVjdFN0b3JlRmlu
ZC0+dmFsdWUuaW5kZXhlcy5yZW1vdmUoYWRkZWRJbmRleElEKTsKLSAgICAgICAgc3VjY2Vzc0Nh
bGxiYWNrKGZhbHNlKTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVl
c3QtPnJlcXVlc3RJRCgpOwotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJ
RCwgcmVxdWVzdC5yZWxlYXNlKCkpOwotCi0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y3JlYXRlSW5kZXhJ
bkJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCB0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0
b3JlSUQsIG1ldGFkYXRhKSk7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRl
bGV0ZUluZGV4KGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50
NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
Ym9vbCk+IHN1Y2Nlc3NDYWxsYmFjaykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkp
OwotCi0gICAgaWYgKCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKSB7Ci0gICAgICAgIHN1Y2Nlc3ND
YWxsYmFjayhmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9t
ZXRhZGF0YS0+b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3JlSUQpKTsKLSAgICBBU1NF
UlQobV9tZXRhZGF0YS0+b2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlEKS5pbmRleGVzLmNv
bnRhaW5zKGluZGV4SUQpKTsKLQotICAgIElEQkluZGV4TWV0YWRhdGEgbWV0YWRhdGEgPSBtX21l
dGFkYXRhLT5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSUQpLmluZGV4ZXMudGFrZShpbmRl
eElEKTsKLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3luY1JlcXVlc3RJ
bXBsPGJvb2w+OjpjcmVhdGUoW3RoaXMsIG9iamVjdFN0b3JlSUQsIG1ldGFkYXRhLCBzdWNjZXNz
Q2FsbGJhY2tdKGJvb2wgc3VjY2VzcykgewotICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAg
ICAgICAgIGF1dG8gb2JqZWN0U3RvcmVGaW5kID0gbV9tZXRhZGF0YS0+b2JqZWN0U3RvcmVzLmZp
bmQob2JqZWN0U3RvcmVJRCk7Ci0gICAgICAgICAgICBpZiAob2JqZWN0U3RvcmVGaW5kICE9IG1f
bWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5lbmQoKSkKLSAgICAgICAgICAgICAgICBvYmplY3RTdG9y
ZUZpbmQtPnZhbHVlLmluZGV4ZXMuc2V0KG1ldGFkYXRhLmlkLCBtZXRhZGF0YSk7Ci0gICAgICAg
IH0KLSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHN1Y2Nlc3MpOwotICAgIH0sIFt0aGlzLCBvYmpl
Y3RTdG9yZUlELCBtZXRhZGF0YSwgc3VjY2Vzc0NhbGxiYWNrXSB7Ci0gICAgICAgIGF1dG8gb2Jq
ZWN0U3RvcmVGaW5kID0gbV9tZXRhZGF0YS0+b2JqZWN0U3RvcmVzLmZpbmQob2JqZWN0U3RvcmVJ
RCk7Ci0gICAgICAgIGlmIChvYmplY3RTdG9yZUZpbmQgIT0gbV9tZXRhZGF0YS0+b2JqZWN0U3Rv
cmVzLmVuZCgpKQotICAgICAgICAgICAgb2JqZWN0U3RvcmVGaW5kLT52YWx1ZS5pbmRleGVzLnNl
dChtZXRhZGF0YS5pZCwgbWV0YWRhdGEpOwotICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZmFsc2Up
OwotICAgIH0pOwotCi0gICAgdWludDY0X3QgcmVxdWVzdElEID0gcmVxdWVzdC0+cmVxdWVzdElE
KCk7Ci0gICAgbV9wZW5kaW5nRGF0YWJhc2VUYXNrcy5hZGQocmVxdWVzdElELCByZXF1ZXN0LnJl
bGVhc2UoKSk7Ci0KLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygq
dGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVJbmRleEluQmFja2luZ1N0b3Jl
LCByZXF1ZXN0SUQsIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJRCwgaW5kZXhJ
RCkpOwotfQotCi12b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpwdXRSZWNvcmQoY29uc3Qg
SURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SUQsIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYg
dmFsdWUsIGludDY0X3QgcHV0TW9kZSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElEcywg
Y29uc3QgVmVjdG9yPFZlY3RvcjxJREJLZXlEYXRhPj4mIGluZGV4S2V5cywgc3RkOjpmdW5jdGlv
bjx2b2lkIChjb25zdCBJREJLZXlEYXRhJiwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYpPiBjYWxs
YmFjaykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFtX2Fj
Y2VwdGluZ05ld1JlcXVlc3RzKSB7Ci0gICAgICAgIGNhbGxiYWNrKElEQktleURhdGEoKSwgSU5W
QUxJRF9TVEFURV9FUlIsICJVbmFibGUgdG8gcHV0IHJlY29yZCBpbnRvIGRhdGFiYXNlIGJlY2F1
c2UgaXQgaGFzIHNodXQgZG93biIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNT
RVJUKG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5jb250YWlucyhvYmplY3RTdG9yZUlEKSk7Ci0K
LSAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDxJREJL
ZXlEYXRhLCB1aW50MzJfdCwgU3RyaW5nPjo6Y3JlYXRlKFt0aGlzLCBjYWxsYmFja10oY29uc3Qg
SURCS2V5RGF0YSYga2V5RGF0YSwgdWludDMyX3QgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVy
cm9yTWVzc2FnZSkgewotICAgICAgICBjYWxsYmFjayhrZXlEYXRhLCBlcnJvckNvZGUsIGVycm9y
TWVzc2FnZSk7Ci0gICAgfSwgW3RoaXMsIGNhbGxiYWNrXSB7Ci0gICAgICAgIGNhbGxiYWNrKElE
QktleURhdGEoKSwgSU5WQUxJRF9TVEFURV9FUlIsICJVbmFibGUgdG8gcHV0IHJlY29yZCBpbnRv
IGRhdGFiYXNlIik7Ci0gICAgfSk7Ci0KLSAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSByZXF1ZXN0
LT5yZXF1ZXN0SUQoKTsKLSAgICBtX3BlbmRpbmdEYXRhYmFzZVRhc2tzLmFkZChyZXF1ZXN0SUQs
IHJlcXVlc3QucmVsZWFzZSgpKTsKLQotICAgIHBvc3REYXRhYmFzZVRhc2soY3JlYXRlQ3Jvc3NU
aHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OnB1dFJlY29yZEluQmFj
a2luZ1N0b3JlLCByZXF1ZXN0SUQsIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgbV9tZXRhZGF0YS0+
b2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlEKSwga2V5RGF0YSwgdmFsdWUudmVjdG9yKCks
IHB1dE1vZGUsIGluZGV4SURzLCBpbmRleEtleXMpKTsKLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZTo6Z2V0UmVjb3JkKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0IElE
QktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29y
VHlwZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBJREJHZXRSZXN1bHQmLCB1aW50MzJfdCwg
Y29uc3QgU3RyaW5nJik+IGNhbGxiYWNrKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4o
KSk7Ci0KLSAgICBpZiAoIW1fYWNjZXB0aW5nTmV3UmVxdWVzdHMpIHsKLSAgICAgICAgY2FsbGJh
Y2soSURCR2V0UmVzdWx0KCksIElOVkFMSURfU1RBVEVfRVJSLCAiVW5hYmxlIHRvIGdldCByZWNv
cmQgZnJvbSBkYXRhYmFzZSBiZWNhdXNlIGl0IGhhcyBzaHV0IGRvd24iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChtX21ldGFkYXRhLT5vYmplY3RTdG9yZXMuY29udGFp
bnMob2JqZWN0U3RvcmVJRCkpOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9
IEFzeW5jUmVxdWVzdEltcGw8SURCR2V0UmVzdWx0LCB1aW50MzJfdCwgU3RyaW5nPjo6Y3JlYXRl
KFt0aGlzLCBjYWxsYmFja10oY29uc3QgSURCR2V0UmVzdWx0JiByZXN1bHQsIHVpbnQzMl90IGVy
cm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpIHsKLSAgICAgICAgY2FsbGJhY2so
cmVzdWx0LCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7Ci0gICAgfSwgW3RoaXMsIGNhbGxiYWNr
XSB7Ci0gICAgICAgIGNhbGxiYWNrKElEQkdldFJlc3VsdCgpLCBJTlZBTElEX1NUQVRFX0VSUiwg
IlVuYWJsZSB0byBnZXQgcmVjb3JkIGZyb20gZGF0YWJhc2UiKTsKLSAgICB9KTsKLQotICAgIHVp
bnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3QtPnJlcXVlc3RJRCgpOwotICAgIG1fcGVuZGluZ0Rh
dGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJRCwgcmVxdWVzdC5yZWxlYXNlKCkpOwotCi0gICAgcG9z
dERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZTo6Z2V0UmVjb3JkRnJvbUJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCB0cmFuc2Fj
dGlvbklkZW50aWZpZXIsIG1fbWV0YWRhdGEtPm9iamVjdFN0b3Jlcy5nZXQob2JqZWN0U3RvcmVJ
RCksIGluZGV4SUQsIGtleVJhbmdlRGF0YSwgY3Vyc29yVHlwZSkpOwotfQotCi12b2lkIExlZ2Fj
eVVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29yKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQs
IEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9uIGN1cnNvckRpcmVjdGlvbiwgSW5kZXhlZERCOjpD
dXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5
cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKGludDY0X3QsIGNvbnN0IElEQktleURhdGEmLCBjb25zdCBJREJLZXlEYXRhJiwgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+LCB1aW50MzJfdCwgY29uc3QgU3RyaW5nJik+IGNhbGxiYWNrKQot
ewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBpZiAoIW1fYWNjZXB0aW5n
TmV3UmVxdWVzdHMpIHsKLSAgICAgICAgY2FsbGJhY2soMCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVs
bHB0ciwgSU5WQUxJRF9TVEFURV9FUlIsICJVbmFibGUgdG8gb3BlbiBjdXJzb3IgaW4gZGF0YWJh
c2UgYmVjYXVzZSBpdCBoYXMgc2h1dCBkb3duIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBBU1NFUlQobV9tZXRhZGF0YS0+b2JqZWN0U3RvcmVzLmNvbnRhaW5zKG9iamVjdFN0b3Jl
SUQpKTsKLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3luY1JlcXVlc3RJ
bXBsPGludDY0X3QsIElEQktleURhdGEsIElEQktleURhdGEsIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiwgdWludDMyX3QsIFN0cmluZz46OmNyZWF0ZShbdGhpcywgY2FsbGJhY2tdKGludDY0X3Qg
Y3Vyc29ySUQsIGNvbnN0IElEQktleURhdGEmIGtleSwgY29uc3QgSURCS2V5RGF0YSYgcHJpbWFy
eUtleSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCB1aW50MzJfdCBlcnJvckNvZGUs
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgIGNhbGxiYWNrKGN1cnNvcklE
LCBrZXksIHByaW1hcnlLZXksIHZhbHVlLCBlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7Ci0gICAg
fSwgW3RoaXMsIGNhbGxiYWNrXSB7Ci0gICAgICAgIGNhbGxiYWNrKDAsIG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIsIElOVkFMSURfU1RBVEVfRVJSLCAiVW5hYmxlIHRvIGdldCByZWNvcmQgZnJv
bSBkYXRhYmFzZSIpOwotICAgIH0pOwotCi0gICAgdWludDY0X3QgcmVxdWVzdElEID0gcmVxdWVz
dC0+cmVxdWVzdElEKCk7Ci0gICAgbV9wZW5kaW5nRGF0YWJhc2VUYXNrcy5hZGQocmVxdWVzdElE
LCByZXF1ZXN0LnJlbGVhc2UoKSk7Ci0KLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3Nz
VGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpvcGVuQ3Vyc29ySW5C
YWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9y
ZUlELCBpbmRleElELCBjdXJzb3JEaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRhc2tUeXBlLCBrZXlS
YW5nZURhdGEpKTsKLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y3Vyc29yQWR2
YW5jZShjb25zdCBJREJJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCB1aW50NjRfdCBjb3Vu
dCwgc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBJREJLZXlEYXRhJiwgY29uc3QgSURCS2V5RGF0
YSYsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYpPiBj
YWxsYmFjaykKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFt
X2FjY2VwdGluZ05ld1JlcXVlc3RzKSB7Ci0gICAgICAgIGNhbGxiYWNrKG51bGxwdHIsIG51bGxw
dHIsIG51bGxwdHIsIElOVkFMSURfU1RBVEVfRVJSLCAiVW5hYmxlIHRvIGFkdmFuY2UgY3Vyc29y
IGluIGRhdGFiYXNlIGJlY2F1c2UgaXQgaGFzIHNodXQgZG93biIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gcmVxdWVzdCA9IEFzeW5jUmVxdWVz
dEltcGw8SURCS2V5RGF0YSwgSURCS2V5RGF0YSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCB1
aW50MzJfdCwgU3RyaW5nPjo6Y3JlYXRlKFt0aGlzLCBjYWxsYmFja10oY29uc3QgSURCS2V5RGF0
YSYga2V5LCBjb25zdCBJREJLZXlEYXRhJiBwcmltYXJ5S2V5LCBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gdmFsdWUsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpIHsKLSAgICAgICAgY2FsbGJhY2soa2V5LCBwcmltYXJ5S2V5LCB2YWx1ZSwgZXJyb3JDb2Rl
LCBlcnJvck1lc3NhZ2UpOwotICAgIH0sIFt0aGlzLCBjYWxsYmFja10gewotICAgICAgICBjYWxs
YmFjayhudWxscHRyLCBudWxscHRyLCBudWxscHRyLCBJTlZBTElEX1NUQVRFX0VSUiwgIlVuYWJs
ZSB0byBhZHZhbmNlIGN1cnNvciBpbiBkYXRhYmFzZSIpOwotICAgIH0pOwotCi0gICAgdWludDY0
X3QgcmVxdWVzdElEID0gcmVxdWVzdC0+cmVxdWVzdElEKCk7Ci0gICAgbV9wZW5kaW5nRGF0YWJh
c2VUYXNrcy5hZGQocmVxdWVzdElELCByZXF1ZXN0LnJlbGVhc2UoKSk7Ci0KLSAgICBwb3N0RGF0
YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlOjphZHZhbmNlQ3Vyc29ySW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgY3Vyc29ySWRl
bnRpZmllciwgY291bnQpKTsKLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6Y3Vy
c29ySXRlcmF0ZShjb25zdCBJREJJZGVudGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBJ
REJLZXlEYXRhJiBrZXksIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCS2V5RGF0YSYsIGNv
bnN0IElEQktleURhdGEmLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIHVpbnQzMl90LCBjb25z
dCBTdHJpbmcmKT4gY2FsbGJhY2spCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LQotICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cykgewotICAgICAgICBjYWxsYmFjayhu
dWxscHRyLCBudWxscHRyLCBudWxscHRyLCBJTlZBTElEX1NUQVRFX0VSUiwgIlVuYWJsZSB0byBp
dGVyYXRlIGN1cnNvciBpbiBkYXRhYmFzZSBiZWNhdXNlIGl0IGhhcyBzaHV0IGRvd24iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3Qg
PSBBc3luY1JlcXVlc3RJbXBsPElEQktleURhdGEsIElEQktleURhdGEsIFBhc3NSZWZQdHI8U2hh
cmVkQnVmZmVyPiwgdWludDMyX3QsIFN0cmluZz46OmNyZWF0ZShbdGhpcywgY2FsbGJhY2tdKGNv
bnN0IElEQktleURhdGEmIGtleSwgY29uc3QgSURCS2V5RGF0YSYgcHJpbWFyeUtleSwgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlLCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgIGNhbGxiYWNrKGtleSwgcHJpbWFyeUtleSwgdmFs
dWUsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsKLSAgICB9LCBbdGhpcywgY2FsbGJhY2tdIHsK
LSAgICAgICAgY2FsbGJhY2sobnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgSU5WQUxJRF9TVEFU
RV9FUlIsICJVbmFibGUgdG8gaXRlcmF0ZSBjdXJzb3IgaW4gZGF0YWJhc2UiKTsKLSAgICB9KTsK
LQotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHJlcXVlc3QtPnJlcXVlc3RJRCgpOwotICAgIG1f
cGVuZGluZ0RhdGFiYXNlVGFza3MuYWRkKHJlcXVlc3RJRCwgcmVxdWVzdC5yZWxlYXNlKCkpOwot
Ci0gICAgcG9zdERhdGFiYXNlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckluQmFja2luZ1N0b3JlLCByZXF1ZXN0
SUQsIGN1cnNvcklkZW50aWZpZXIsIGtleSkpOwotfQotCi12b2lkIExlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlOjpjb3VudChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBJREJLZXlSYW5n
ZURhdGEmIGtleVJhbmdlRGF0YSwgc3RkOjpmdW5jdGlvbjx2b2lkIChpbnQ2NF90LCB1aW50MzJf
dCwgY29uc3QgU3RyaW5nJik+IGNhbGxiYWNrKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01h
aW4oKSk7Ci0KLSAgICBpZiAoIW1fYWNjZXB0aW5nTmV3UmVxdWVzdHMpIHsKLSAgICAgICAgY2Fs
bGJhY2soMCwgSU5WQUxJRF9TVEFURV9FUlIsICJVbmFibGUgdG8gZ2V0IGNvdW50IGZyb20gZGF0
YWJhc2UgYmVjYXVzZSBpdCBoYXMgc2h1dCBkb3duIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiByZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDxp
bnQ2NF90LCB1aW50MzJfdCwgU3RyaW5nPjo6Y3JlYXRlKFt0aGlzLCBjYWxsYmFja10oaW50NjRf
dCBjb3VudCwgdWludDMyX3QgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkg
ewotICAgICAgICBjYWxsYmFjayhjb3VudCwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpOwotICAg
IH0sIFt0aGlzLCBjYWxsYmFja10gewotICAgICAgICBjYWxsYmFjaygwLCBJTlZBTElEX1NUQVRF
X0VSUiwgIlVuYWJsZSB0byBnZXQgY291bnQgZnJvbSBkYXRhYmFzZSIpOwotICAgIH0pOwotCi0g
ICAgdWludDY0X3QgcmVxdWVzdElEID0gcmVxdWVzdC0+cmVxdWVzdElEKCk7Ci0gICAgbV9wZW5k
aW5nRGF0YWJhc2VUYXNrcy5hZGQocmVxdWVzdElELCByZXF1ZXN0LnJlbGVhc2UoKSk7Ci0KLSAg
ICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVu
aXF1ZUlEQkRhdGFiYXNlOjpjb3VudEluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJRCwgaW5kZXhJRCwga2V5UmFuZ2VEYXRhKSk7Ci19
Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRlbGV0ZVJhbmdlKGNvbnN0IElEQklk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBj
b25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgc3RkOjpmdW5jdGlvbjx2b2lkICh1
aW50MzJfdCwgY29uc3QgU3RyaW5nJik+IGNhbGxiYWNrKQotewotICAgIEFTU0VSVChSdW5Mb29w
Ojppc01haW4oKSk7Ci0KLSAgICBpZiAoIW1fYWNjZXB0aW5nTmV3UmVxdWVzdHMpIHsKLSAgICAg
ICAgY2FsbGJhY2soSU5WQUxJRF9TVEFURV9FUlIsICJVbmFibGUgdG8gZGVsZXRlUmFuZ2UgZnJv
bSBkYXRhYmFzZSBiZWNhdXNlIGl0IGhhcyBzaHV0IGRvd24iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHJlcXVlc3QgPSBBc3luY1JlcXVlc3RJ
bXBsPHVpbnQzMl90LCBTdHJpbmc+OjpjcmVhdGUoW2NhbGxiYWNrXSh1aW50MzJfdCBlcnJvckNv
ZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgIGNhbGxiYWNrKGVycm9y
Q29kZSwgZXJyb3JNZXNzYWdlKTsKLSAgICB9LCBbY2FsbGJhY2tdIHsKLSAgICAgICAgY2FsbGJh
Y2soSU5WQUxJRF9TVEFURV9FUlIsICJVbmFibGUgdG8gZGVsZXRlUmFuZ2UgZnJvbSBkYXRhYmFz
ZSIpOwotICAgIH0pOwotCi0gICAgdWludDY0X3QgcmVxdWVzdElEID0gcmVxdWVzdC0+cmVxdWVz
dElEKCk7Ci0gICAgbV9wZW5kaW5nRGF0YWJhc2VUYXNrcy5hZGQocmVxdWVzdElELCByZXF1ZXN0
LnJlbGVhc2UoKSk7Ci0KLSAgICBwb3N0RGF0YWJhc2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxldGVSYW5nZUluQmFja2luZ1N0
b3JlLCByZXF1ZXN0SUQsIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJRCwga2V5
UmFuZ2VEYXRhKSk7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6Om9wZW5CYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJRHMsIEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLQotICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFj
a2luZ1N0b3JlLT5lc3RhYmxpc2hUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9i
amVjdFN0b3JlSURzLCBtb2RlKTsKLQotICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9z
c1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRXN0YWJsaXNo
VHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3VjY2VzcykpOwotICAgIHBvc3RN
YWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZTo6ZGlkQ29tcGxldGVUcmFuc2FjdGlvbk9wZXJhdGlvbiwgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBzdWNjZXNzKSk7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6
OmJlZ2luQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdT
dG9yZS0+YmVnaW5UcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIpOwotCi0gICAgcG9z
dE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlOjpkaWRDb21wbGV0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uLCB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIHN1Y2Nlc3MpKTsKLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFz
ZTo6Y29tbWl0QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJh
bnNhY3Rpb25JZGVudGlmaWVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tp
bmdTdG9yZS0+Y29tbWl0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLQotICAg
IHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkQ29tcGxldGVUcmFuc2FjdGlvbk9wZXJhdGlvbiwgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBzdWNjZXNzKSk7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0
YWJhc2U6OnJlc2V0QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkp
OwotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBtX2Jh
Y2tpbmdTdG9yZS0+cmVzZXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkZW50aWZpZXIpOwotCi0g
ICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2Fj
eVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRSZXNldFRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbklkZW50
aWZpZXIsIHN1Y2Nlc3MpKTsKLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZENvbXBsZXRlVHJhbnNh
Y3Rpb25PcGVyYXRpb24sIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgc3VjY2VzcykpOwotfQotCi12
b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpyb2xsYmFja0JhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcikKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwot
Ci0gICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUtPnJvbGxiYWNrVHJhbnNhY3Rpb24o
dHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLQotICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVD
cm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ29tcGxl
dGVUcmFuc2FjdGlvbk9wZXJhdGlvbiwgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBzdWNjZXNzKSk7
Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNoYW5nZURhdGFiYXNlVmVyc2lv
bkluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBuZXdWZXJzaW9uKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KLSAg
ICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+Y2hhbmdlRGF0YWJhc2VWZXJzaW9uKHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgbmV3VmVyc2lvbik7Ci0KLSAgICBwb3N0TWFpblRocmVhZFRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6
OmRpZENoYW5nZURhdGFiYXNlVmVyc2lvbiwgcmVxdWVzdElELCBzdWNjZXNzKSk7Ci19Ci0KLXZv
aWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlSW5CYWNraW5nU3Rv
cmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRhKQotewotICAg
IEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7
Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUo
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBtZXRhZGF0YSk7Ci0KLSAgICBwb3N0TWFpblRocmVhZFRh
c2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6
OmRpZENyZWF0ZU9iamVjdFN0b3JlLCByZXF1ZXN0SUQsIHN1Y2Nlc3MpKTsKLX0KLQotdm9pZCBM
ZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmVJbkJhY2tpbmdTdG9yZSh1
aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlEKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNN
YWluKCkpOwotICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KLSAgICBib29sIHN1Y2Nlc3Mg
PSBtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBvYmplY3RTdG9yZUlEKTsKLQotICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1Ro
cmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkRGVsZXRlT2JqZWN0
U3RvcmUsIHJlcXVlc3RJRCwgc3VjY2VzcykpOwotfQotCi12b2lkIExlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlOjpjbGVhck9iamVjdFN0b3JlSW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElE
LCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJRCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NF
UlQobV9iYWNraW5nU3RvcmUpOwotCi0gICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3RvcmUt
PmNsZWFyT2JqZWN0U3RvcmUodHJhbnNhY3Rpb25JZGVudGlmaWVyLCBvYmplY3RTdG9yZUlEKTsK
LQotICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZM
ZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ2xlYXJPYmplY3RTdG9yZSwgcmVxdWVzdElELCBz
dWNjZXNzKSk7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNyZWF0ZUluZGV4
SW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSYgbWV0YWRhdGEpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKLQotICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFj
a2luZ1N0b3JlLT5jcmVhdGVJbmRleCh0cmFuc2FjdGlvbklkZW50aWZpZXIsIG9iamVjdFN0b3Jl
SUQsIG1ldGFkYXRhKTsKLQotICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ3JlYXRlSW5kZXgsIHJl
cXVlc3RJRCwgc3VjY2VzcykpOwotfQotCi12b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpk
ZWxldGVJbmRleEluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGlu
dDY0X3QgaW5kZXhJRCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBB
U1NFUlQobV9iYWNraW5nU3RvcmUpOwotCi0gICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5nU3Rv
cmUtPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJRCwgaW5k
ZXhJRCk7Ci0KLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZUluZGV4LCByZXF1ZXN0SUQs
IHN1Y2Nlc3MpKTsKLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6cHV0UmVjb3Jk
SW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbiwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYgb2JqZWN0U3RvcmVNZXRh
ZGF0YSwgY29uc3QgSURCS2V5RGF0YSYgaW5wdXRLZXlEYXRhLCBjb25zdCBWZWN0b3I8dWludDhf
dD4mIHZhbHVlLCBpbnQ2NF90IHB1dE1vZGUsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJ
RHMsIGNvbnN0IFZlY3RvcjxWZWN0b3I8SURCS2V5RGF0YT4+JiBpbmRleEtleXMpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsK
LQotICAgIGJvb2wga2V5V2FzR2VuZXJhdGVkID0gZmFsc2U7Ci0gICAgSURCS2V5RGF0YSBrZXk7
Ci0gICAgaW50NjRfdCBrZXlOdW1iZXIgPSAwOwotCi0gICAgaWYgKHB1dE1vZGUgIT0gSURCRGF0
YWJhc2VCYWNrZW5kOjpDdXJzb3JVcGRhdGUgJiYgb2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5j
cmVtZW50ICYmIGlucHV0S2V5RGF0YS5pc051bGwoKSkgewotICAgICAgICBpZiAoIW1fYmFja2lu
Z1N0b3JlLT5nZW5lcmF0ZUtleU51bWJlcih0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0
YS5pZCwga2V5TnVtYmVyKSkgewotICAgICAgICAgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRQdXRS
ZWNvcmRJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCBJREJLZXlEYXRhKCksIElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiSW50ZXJuYWwgYmFja2luZyBz
dG9yZSBlcnJvciBjaGVja2luZyBmb3Iga2V5IGV4aXN0ZW5jZSIpKSk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAga2V5LnNldE51bWJlclZhbHVlKGtleU51bWJlcik7
Ci0gICAgICAgIGtleVdhc0dlbmVyYXRlZCA9IHRydWU7Ci0gICAgfSBlbHNlCi0gICAgICAgIGtl
eSA9IGlucHV0S2V5RGF0YTsKLQotICAgIGlmIChwdXRNb2RlID09IElEQkRhdGFiYXNlQmFja2Vu
ZDo6QWRkT25seSkgewotICAgICAgICBib29sIGtleUV4aXN0czsKLSAgICAgICAgaWYgKCFtX2Jh
Y2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbiwgb2JqZWN0U3Rv
cmVNZXRhZGF0YS5pZCwga2V5LCBrZXlFeGlzdHMpKSB7Ci0gICAgICAgICAgICBwb3N0TWFpblRo
cmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0
YWJhc2U6OmRpZFB1dFJlY29yZEluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQktleURhdGEo
KSwgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJJbnRl
cm5hbCBiYWNraW5nIHN0b3JlIGVycm9yIGNoZWNraW5nIGZvciBrZXkgZXhpc3RlbmNlIikpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoa2V5RXhpc3RzKSB7
Ci0gICAgICAgICAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0
aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZFB1dFJlY29yZEluQmFja2luZ1N0b3Jl
LCByZXF1ZXN0SUQsIElEQktleURhdGEoKSwgSURCRGF0YWJhc2VFeGNlcHRpb246OkNvbnN0cmFp
bnRFcnJvciwgQVNDSUlMaXRlcmFsKCJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBz
dG9yZSIpKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAv
LyBUaGUgc3BlYyBzYXlzIHRoYXQgZXZlbiBpZiB3ZSdyZSBhYm91dCB0byBvdmVyd3JpdGUgdGhl
IHJlY29yZCwgcGVyZm9ybSB0aGUgc3RlcHMgdG8gZGVsZXRlIGl0IGZpcnN0LgotICAgIC8vIFRo
aXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgZm9ybWFsbHkgZGVsZXRpbmcgaXQgZnJvbSBmcm9tIHRo
ZSBvYmplY3Qgc3RvcmUgYWxzbyByZW1vdmVzIGl0IGZyb20gdGhlIGFwcHJvcHJpYXRlIGluZGV4
ZXMuCi0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlUmVjb3JkKHRyYW5zYWN0aW9uLCBv
YmplY3RTdG9yZU1ldGFkYXRhLmlkLCBrZXkpKSB7Ci0gICAgICAgIHBvc3RNYWluVGhyZWFkVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUHV0UmVjb3JkSW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgSURCS2V5RGF0YSgpLCBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlJlcGxhY2luZyBh
biBleGlzdGluZyBrZXkgaW4gYmFja2luZyBzdG9yZSwgdW5hYmxlIHRvIGRlbGV0ZSBwcmV2aW91
cyByZWNvcmQuIikpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9iYWNr
aW5nU3RvcmUtPnB1dFJlY29yZCh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwg
a2V5LCB2YWx1ZS5kYXRhKCksIHZhbHVlLnNpemUoKSkpIHsKLSAgICAgICAgcG9zdE1haW5UaHJl
YWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRQdXRSZWNvcmRJbkJhY2tpbmdTdG9yZSwgcmVxdWVzdElELCBJREJLZXlEYXRhKCks
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiSW50ZXJu
YWwgYmFja2luZyBzdG9yZSBlcnJvciBwdXR0aW5nIGEgcmVjb3JkIikpKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIEFTU0VSVChpbmRleElEcy5zaXplKCkgPT0gaW5kZXhLZXlzLnNp
emUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleElEcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGluZGV4S2V5c1tpXS5zaXplKCk7ICsr
aikgewotICAgICAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+cHV0SW5kZXhSZWNvcmQodHJh
bnNhY3Rpb24sIG9iamVjdFN0b3JlTWV0YWRhdGEuaWQsIGluZGV4SURzW2ldLCBrZXksIGluZGV4
S2V5c1tpXVtqXSkpIHsKLSAgICAgICAgICAgICAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZFB1dFJl
Y29yZEluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQktleURhdGEoKSwgSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJJbnRlcm5hbCBiYWNraW5nIHN0
b3JlIGVycm9yIHdyaXRpbmcgaW5kZXgga2V5IikpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2JhY2tpbmdTdG9yZS0+
bm90aWZ5Q3Vyc29yc09mQ2hhbmdlcyh0cmFuc2FjdGlvbiwgb2JqZWN0U3RvcmVNZXRhZGF0YS5p
ZCk7Ci0KLSAgICBpZiAocHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmQ6OkN1cnNvclVwZGF0
ZSAmJiBvYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQgJiYga2V5LnR5cGUoKSA9PSBL
ZXlUeXBlOjpOdW1iZXIpIHsKLSAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+dXBkYXRlS2V5
R2VuZXJhdG9yTnVtYmVyKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkLCBrZXlO
dW1iZXIsIGtleVdhc0dlbmVyYXRlZCkpIHsKLSAgICAgICAgICAgIHBvc3RNYWluVGhyZWFkVGFz
ayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6
ZGlkUHV0UmVjb3JkSW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgSURCS2V5RGF0YSgpLCBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkludGVybmFsIGJh
Y2tpbmcgc3RvcmUgZXJyb3IgdXBkYXRpbmcga2V5IGdlbmVyYXRvciIpKSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3Jl
YXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZFB1
dFJlY29yZEluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIGtleSwgMCwgU3RyaW5nKFN0cmluZ0lt
cGw6OmVtcHR5KCkpKSk7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZFB1
dFJlY29yZEluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCS2V5RGF0
YSYga2V5RGF0YSwgdWludDMyX3QgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2Fn
ZSkKLXsKLSAgICBtX3BlbmRpbmdEYXRhYmFzZVRhc2tzLnRha2UocmVxdWVzdElEKS5nZXQoKS5j
b21wbGV0ZVJlcXVlc3Qoa2V5RGF0YSwgZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpOwotfQotCi12
b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpnZXRSZWNvcmRGcm9tQmFja2luZ1N0b3JlKHVp
bnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb24sIGNvbnN0
IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG9iamVjdFN0b3JlTWV0YWRhdGEsIGludDY0X3QgaW5k
ZXhJRCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEsIEluZGV4ZWREQjo6Q3Vy
c29yVHlwZSBjdXJzb3JUeXBlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwot
ICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZSk7Ci0KLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtl
eVJhbmdlID0ga2V5UmFuZ2VEYXRhLm1heWJlQ3JlYXRlSURCS2V5UmFuZ2UoKTsKLSAgICBBU1NF
UlQoa2V5UmFuZ2UpOwotICAgIGlmICgha2V5UmFuZ2UpIHsKLSAgICAgICAgcG9zdE1haW5UaHJl
YWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlOjpkaWRHZXRSZWNvcmRGcm9tQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQkdldFJlc3Vs
dCgpLCBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIklu
dmFsaWQgSURCS2V5UmFuZ2UgcmVxdWVzdGVkIGZyb20gYmFja2luZyBzdG9yZSIpKSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaW5kZXhJRCA9PSBJREJJbmRleE1ldGFkYXRh
OjpJbnZhbGlkSWQpIHsKLSAgICAgICAgLy8gSURCT2JqZWN0U3RvcmUgZ2V0IHJlY29yZAotICAg
ICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiByZXN1bHQ7Ci0KLSAgICAgICAgaWYgKGtleVJhbmdl
LT5pc09ubHlLZXkoKSkgewotICAgICAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Z2V0S2V5
UmVjb3JkRnJvbU9iamVjdFN0b3JlKHRyYW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlk
LCAqa2V5UmFuZ2UtPmxvd2VyKCksIHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgcG9zdE1haW5U
aHJlYWRUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlOjpkaWRHZXRSZWNvcmRGcm9tQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQkdldFJl
c3VsdCgpLCBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwo
IkZhaWxlZCB0byBnZXQga2V5IHJlY29yZCBmcm9tIG9iamVjdCBzdG9yZSBpbiBiYWNraW5nIHN0
b3JlIikpKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIElEQkdldFJlc3Vs
dCBnZXRSZXN1bHQgPSByZXN1bHQgPyBJREJHZXRSZXN1bHQocmVzdWx0LnJlbGVhc2UoKSwga2V5
UmFuZ2UtPmxvd2VyKCksIG9iamVjdFN0b3JlTWV0YWRhdGEua2V5UGF0aCkgOiBJREJHZXRSZXN1
bHQoKTsKLSAgICAgICAgICAgICAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZEdldFJlY29yZEZyb21C
YWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgZ2V0UmVzdWx0LCAwLCBTdHJpbmcoU3RyaW5nSW1wbDo6
ZW1wdHkoKSkpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0KLSAgICAgICAgUmVmUHRyPElEQktleT4gcmVzdWx0S2V5OwotCi0gICAgICAgIGlmICgh
bV9iYWNraW5nU3RvcmUtPmdldEtleVJhbmdlUmVjb3JkRnJvbU9iamVjdFN0b3JlKHRyYW5zYWN0
aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkLCAqa2V5UmFuZ2UsIHJlc3VsdCwgcmVzdWx0S2V5
KSkKLSAgICAgICAgICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkR2V0UmVjb3JkRnJvbUJhY2tpbmdT
dG9yZSwgcmVxdWVzdElELCBJREJHZXRSZXN1bHQoKSwgSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZ2V0IGtleSByYW5nZSByZWNvcmQg
ZnJvbSBvYmplY3Qgc3RvcmUgaW4gYmFja2luZyBzdG9yZSIpKSk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgSURCR2V0UmVzdWx0IGdldFJlc3VsdCA9IHJlc3VsdCA/IElEQkdldFJlc3Vs
dChyZXN1bHQucmVsZWFzZSgpLCByZXN1bHRLZXkucmVsZWFzZSgpLCBvYmplY3RTdG9yZU1ldGFk
YXRhLmtleVBhdGgpIDogSURCR2V0UmVzdWx0KCk7Ci0gICAgICAgICAgICBwb3N0TWFpblRocmVh
ZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJh
c2U6OmRpZEdldFJlY29yZEZyb21CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgZ2V0UmVzdWx0LCAw
LCBTdHJpbmcoU3RyaW5nSW1wbDo6ZW1wdHkoKSkpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBJREJJbmRleCBnZXQgcmVjb3JkCi0KLSAgICBJREJHZXRS
ZXN1bHQgcmVzdWx0OwotICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmdldEluZGV4UmVjb3JkKHRy
YW5zYWN0aW9uLCBvYmplY3RTdG9yZU1ldGFkYXRhLmlkLCBpbmRleElELCBrZXlSYW5nZURhdGEs
IGN1cnNvclR5cGUsIHJlc3VsdCkpIHsKLSAgICAgICAgcG9zdE1haW5UaHJlYWRUYXNrKGNyZWF0
ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRHZXRS
ZWNvcmRGcm9tQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIElEQkdldFJlc3VsdCgpLCBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkZhaWxlZCB0byBnZXQg
aW5kZXggcmVjb3JkIGZyb20gYmFja2luZyBzdG9yZSIpKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBXZSBtdXN0IHJldHVybiBhIGtleSBwYXRoIHRvIGtub3cgaG93IHRvIGlu
amVjdCB0aGUgcmVzdWx0IGtleSBpbnRvIHRoZSByZXN1bHQgdmFsdWUgb2JqZWN0LgotICAgIHJl
c3VsdC5zZXRLZXlQYXRoKG9iamVjdFN0b3JlTWV0YWRhdGEua2V5UGF0aCk7Ci0KLSAgICBwb3N0
TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVl
SURCRGF0YWJhc2U6OmRpZEdldFJlY29yZEZyb21CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgcmVz
dWx0LCAwLCBTdHJpbmcoU3RyaW5nSW1wbDo6ZW1wdHkoKSkpKTsKLX0KLQotdm9pZCBMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZTo6ZGlkR2V0UmVjb3JkRnJvbUJhY2tpbmdTdG9yZSh1aW50NjRfdCBy
ZXF1ZXN0SUQsIGNvbnN0IElEQkdldFJlc3VsdCYgcmVzdWx0LCB1aW50MzJfdCBlcnJvckNvZGUs
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFz
a3MudGFrZShyZXF1ZXN0SUQpLmdldCgpLmNvbXBsZXRlUmVxdWVzdChyZXN1bHQsIGVycm9yQ29k
ZSwgZXJyb3JNZXNzYWdlKTsKLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6b3Bl
bkN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0
X3QgaW5kZXhJRCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gY3Vyc29yRGlyZWN0aW9uLCBJ
bmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNr
VHlwZSB0YXNrVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZSkKLXsKLSAgICBB
U1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOwot
Ci0gICAgaW50NjRfdCBjdXJzb3JJRCA9IDA7Ci0gICAgSURCS2V5RGF0YSBrZXk7Ci0gICAgSURC
S2V5RGF0YSBwcmltYXJ5S2V5OwotICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1ZUJ1ZmZlcjsKLSAg
ICBpbnQzMl90IGVycm9yQ29kZSA9IDA7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBi
b29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+b3BlbkN1cnNvcih0cmFuc2FjdGlvbklkZW50
aWZpZXIsIG9iamVjdFN0b3JlSUQsIGluZGV4SUQsIGN1cnNvckRpcmVjdGlvbiwgY3Vyc29yVHlw
ZSwgdGFza1R5cGUsIGtleVJhbmdlLCBjdXJzb3JJRCwga2V5LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1
ZmZlcik7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgZXJyb3JDb2RlID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvcjsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gQVND
SUlMaXRlcmFsKCJVbmtub3duIGVycm9yIG9wZW5pbmcgY3Vyc29yIGluIGJhY2tpbmcgc3RvcmUi
KTsKLSAgICB9Ci0KLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZE9wZW5DdXJzb3JJbkJhY2tpbmdT
dG9yZSwgcmVxdWVzdElELCBjdXJzb3JJRCwga2V5LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlciwg
ZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpKTsKLX0KLQotdm9pZCBMZWdhY3lVbmlxdWVJREJEYXRh
YmFzZTo6ZGlkT3BlbkN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgaW50
NjRfdCBjdXJzb3JJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5LCBjb25zdCBJREJLZXlEYXRhJiBw
cmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8dWludDhfdD4mIHZhbHVlQnVmZmVyLCB1aW50MzJfdCBl
cnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotICAgIG1fcGVuZGluZ0Rh
dGFiYXNlVGFza3MudGFrZShyZXF1ZXN0SUQpLmdldCgpLmNvbXBsZXRlUmVxdWVzdChjdXJzb3JJ
RCwga2V5LCBwcmltYXJ5S2V5LCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh2YWx1ZUJ1ZmZlci5kYXRh
KCksIHZhbHVlQnVmZmVyLnNpemUoKSksIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsKLX0KLQot
dm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6YWR2YW5jZUN1cnNvckluQmFja2luZ1N0b3Jl
KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmll
ciwgdWludDY0X3QgY291bnQpCi17Ci0gICAgSURCS2V5RGF0YSBrZXk7Ci0gICAgSURCS2V5RGF0
YSBwcmltYXJ5S2V5OwotICAgIFZlY3Rvcjx1aW50OF90PiB2YWx1ZUJ1ZmZlcjsKLSAgICBpbnQz
Ml90IGVycm9yQ29kZSA9IDA7Ci0gICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBib29sIHN1
Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+YWR2YW5jZUN1cnNvcihjdXJzb3JJZGVudGlmaWVyLCBj
b3VudCwga2V5LCBwcmltYXJ5S2V5LCB2YWx1ZUJ1ZmZlcik7Ci0KLSAgICBpZiAoIXN1Y2Nlc3Mp
IHsKLSAgICAgICAgZXJyb3JDb2RlID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJv
cjsKLSAgICAgICAgZXJyb3JNZXNzYWdlID0gQVNDSUlMaXRlcmFsKCJVbmtub3duIGVycm9yIGFk
dmFuY2luZyBjdXJzb3IgaW4gYmFja2luZyBzdG9yZSIpOwotICAgIH0KLQotICAgIHBvc3RNYWlu
VGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJE
YXRhYmFzZTo6ZGlkQWR2YW5jZUN1cnNvckluQmFja2luZ1N0b3JlLCByZXF1ZXN0SUQsIGtleSwg
cHJpbWFyeUtleSwgdmFsdWVCdWZmZXIsIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKSk7Ci19Ci0K
LXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZEFkdmFuY2VDdXJzb3JJbkJhY2tpbmdT
dG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElEQktleURhdGEmIGtleSwgY29uc3QgSURC
S2V5RGF0YSYgcHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZUJ1ZmZlciwg
dWludDMyX3QgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBt
X3BlbmRpbmdEYXRhYmFzZVRhc2tzLnRha2UocmVxdWVzdElEKS5nZXQoKS5jb21wbGV0ZVJlcXVl
c3Qoa2V5LCBwcmltYXJ5S2V5LCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh2YWx1ZUJ1ZmZlci5kYXRh
KCksIHZhbHVlQnVmZmVyLnNpemUoKSksIGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKTsKLX0KLQot
dm9pZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6aXRlcmF0ZUN1cnNvckluQmFja2luZ1N0b3Jl
KHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmll
ciwgY29uc3QgSURCS2V5RGF0YSYgaXRlcmF0ZUtleSkKLXsKLSAgICBJREJLZXlEYXRhIGtleTsK
LSAgICBJREJLZXlEYXRhIHByaW1hcnlLZXk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHZhbHVlQnVm
ZmVyOwotICAgIGludDMyX3QgZXJyb3JDb2RlID0gMDsKLSAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
OwotICAgIGJvb2wgc3VjY2VzcyA9IG1fYmFja2luZ1N0b3JlLT5pdGVyYXRlQ3Vyc29yKGN1cnNv
cklkZW50aWZpZXIsIGl0ZXJhdGVLZXksIGtleSwgcHJpbWFyeUtleSwgdmFsdWVCdWZmZXIpOwot
Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAgIGVycm9yQ29kZSA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3I7Ci0gICAgICAgIGVycm9yTWVzc2FnZSA9IEFTQ0lJTGl0ZXJh
bCgiVW5rbm93biBlcnJvciBpdGVyYXRpbmcgY3Vyc29yIGluIGJhY2tpbmcgc3RvcmUiKTsKLSAg
ICB9Ci0KLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZEl0ZXJhdGVDdXJzb3JJbkJhY2tpbmdTdG9y
ZSwgcmVxdWVzdElELCBrZXksIHByaW1hcnlLZXksIHZhbHVlQnVmZmVyLCBlcnJvckNvZGUsIGVy
cm9yTWVzc2FnZSkpOwotfQotCi12b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkaWRJdGVy
YXRlQ3Vyc29ySW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJLZXlE
YXRhJiBrZXksIGNvbnN0IElEQktleURhdGEmIHByaW1hcnlLZXksIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgdmFsdWVCdWZmZXIsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJv
ck1lc3NhZ2UpCi17Ci0gICAgbV9wZW5kaW5nRGF0YWJhc2VUYXNrcy50YWtlKHJlcXVlc3RJRCku
Z2V0KCkuY29tcGxldGVSZXF1ZXN0KGtleSwgcHJpbWFyeUtleSwgU2hhcmVkQnVmZmVyOjpjcmVh
dGUodmFsdWVCdWZmZXIuZGF0YSgpLCB2YWx1ZUJ1ZmZlci5zaXplKCkpLCBlcnJvckNvZGUsIGVy
cm9yTWVzc2FnZSk7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmNvdW50SW5C
YWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElE
LCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSkKLXsKLSAgICBpbnQ2NF90IGNv
dW50OwotCi0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+Y291bnQodHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBvYmplY3RTdG9yZUlELCBpbmRleElELCBrZXlSYW5nZURhdGEsIGNvdW50KSkgewotICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXQgY291bnQgZnJvbSBiYWNraW5nIHN0b3JlLiIp
OwotICAgICAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlz
LCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZENvdW50SW5CYWNraW5nU3RvcmUsIHJlcXVl
c3RJRCwgMCwgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFs
KCJGYWlsZWQgdG8gZ2V0IGNvdW50IGZyb20gYmFja2luZyBzdG9yZSIpKSk7Ci0KLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHBvc3RNYWluVGhyZWFkVGFzayhjcmVhdGVDcm9zc1RocmVh
ZFRhc2soKnRoaXMsICZMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZGlkQ291bnRJbkJhY2tpbmdT
dG9yZSwgcmVxdWVzdElELCBjb3VudCwgMCwgU3RyaW5nKFN0cmluZ0ltcGw6OmVtcHR5KCkpKSk7
Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZENvdW50SW5CYWNraW5nU3Rv
cmUodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IGNvdW50LCB1aW50MzJfdCBlcnJvckNvZGUs
IGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFz
a3MudGFrZShyZXF1ZXN0SUQpLmdldCgpLmNvbXBsZXRlUmVxdWVzdChjb3VudCwgZXJyb3JDb2Rl
LCBlcnJvck1lc3NhZ2UpOwotfQotCi12b2lkIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpkZWxl
dGVSYW5nZUluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRp
ZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0
IElEQktleVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhKQotewotICAgIGlmICghbV9iYWNraW5nU3Rv
cmUtPmRlbGV0ZVJhbmdlKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0U3RvcmVJRCwga2V5
UmFuZ2VEYXRhKSkgewotICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgcmFuZ2Ug
ZnJvbSBiYWNraW5nIHN0b3JlLiIpOwotICAgICAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRl
Q3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0
ZVJhbmdlSW5CYWNraW5nU3RvcmUsIHJlcXVlc3RJRCwgSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJGYWlsZWQgdG8gZ2V0IGNvdW50IGZyb20gYmFja2lu
ZyBzdG9yZSIpKSk7Ci0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fYmFja2luZ1N0
b3JlLT5ub3RpZnlDdXJzb3JzT2ZDaGFuZ2VzKHRyYW5zYWN0aW9uSWRlbnRpZmllciwgb2JqZWN0
U3RvcmVJRCk7Ci0KLSAgICBwb3N0TWFpblRocmVhZFRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNr
KCp0aGlzLCAmTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZVJhbmdlSW5CYWNraW5n
U3RvcmUsIHJlcXVlc3RJRCwgMCwgU3RyaW5nKFN0cmluZ0ltcGw6OmVtcHR5KCkpKSk7Ci19Ci0K
LXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZERlbGV0ZVJhbmdlSW5CYWNraW5nU3Rv
cmUodWludDY0X3QgcmVxdWVzdElELCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYg
ZXJyb3JNZXNzYWdlKQotewotICAgIG1fcGVuZGluZ0RhdGFiYXNlVGFza3MudGFrZShyZXF1ZXN0
SUQpLmdldCgpLmNvbXBsZXRlUmVxdWVzdChlcnJvckNvZGUsIGVycm9yTWVzc2FnZSk7Ci19Ci0K
LXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmRpZEVzdGFibGlzaFRyYW5zYWN0aW9uKGNv
bnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgYm9vbCBzdWNjZXNzKQot
ewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHRyYW5zYWN0aW9ucyA9IG1fZXN0YWJsaXNoZWRUcmFu
c2FjdGlvbnMuYWRkKCZ0cmFuc2FjdGlvbklkZW50aWZpZXIuY29ubmVjdGlvbigpLCBIYXNoU2V0
PElEQklkZW50aWZpZXI+KCkpOwotICAgIHRyYW5zYWN0aW9ucy5pdGVyYXRvci0+dmFsdWUuYWRk
KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJh
c2U6OmRpZFJlc2V0VHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBib29sIHN1Y2Nlc3MpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigp
KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gdHJhbnNh
Y3Rpb25zID0gbV9lc3RhYmxpc2hlZFRyYW5zYWN0aW9ucy5maW5kKCZ0cmFuc2FjdGlvbklkZW50
aWZpZXIuY29ubmVjdGlvbigpKTsKLSAgICBpZiAodHJhbnNhY3Rpb25zICE9IG1fZXN0YWJsaXNo
ZWRUcmFuc2FjdGlvbnMuZW5kKCkpCi0gICAgICAgIHRyYW5zYWN0aW9ucy5nZXQoKS0+dmFsdWUu
cmVtb3ZlKHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURC
RGF0YWJhc2U6OnJlc2V0QWxsVHJhbnNhY3Rpb25zKGNvbnN0IERhdGFiYXNlUHJvY2Vzc0lEQkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24pCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsK
LSAgICBhdXRvIHRyYW5zYWN0aW9ucyA9IG1fZXN0YWJsaXNoZWRUcmFuc2FjdGlvbnMuZmluZCgm
Y29ubmVjdGlvbik7Ci0gICAgaWYgKHRyYW5zYWN0aW9ucyA9PSBtX2VzdGFibGlzaGVkVHJhbnNh
Y3Rpb25zLmVuZCgpIHx8ICFtX2FjY2VwdGluZ05ld1JlcXVlc3RzKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBmb3IgKGF1dG8mIHRyYW5zYWN0aW9uSWRlbnRpZmllciA6IHRyYW5zYWN0aW9ucy5n
ZXQoKS0+dmFsdWUpIHsKLSAgICAgICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3MuYWRk
KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Ci0gICAgICAgIGlmICghbV9wZW5kaW5nVHJhbnNhY3Rp
b25SZXF1ZXN0cy5jb250YWlucyh0cmFuc2FjdGlvbklkZW50aWZpZXIpKQotICAgICAgICAgICAg
ZmluYWxpemVSb2xsYmFjayh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwotICAgIH0KLX0KLQotdm9p
ZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZTo6ZmluYWxpemVSb2xsYmFjayhjb25zdCBXZWJLaXQ6
OklEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWQpCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKLSAgICBBU1NFUlQobV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3MuY29udGFp
bnModHJhbnNhY3Rpb25JZCkpOwotICAgIEFTU0VSVCghbV9wZW5kaW5nVHJhbnNhY3Rpb25SZXF1
ZXN0cy5jb250YWlucyh0cmFuc2FjdGlvbklkKSk7Ci0gICAgcm9sbGJhY2tUcmFuc2FjdGlvbih0
cmFuc2FjdGlvbklkLCBbdGhpcywgdHJhbnNhY3Rpb25JZF0oYm9vbCkgewotICAgICAgICBBU1NF
UlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgICAgICBpZiAobV9wZW5kaW5nVHJhbnNhY3Rpb25S
ZXF1ZXN0cy5jb250YWlucyh0cmFuc2FjdGlvbklkKSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBBU1NFUlQobV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3MuY29udGFpbnModHJh
bnNhY3Rpb25JZCkpOwotICAgICAgICBtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5yZW1v
dmUodHJhbnNhY3Rpb25JZCk7Ci0gICAgICAgIHJlc2V0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25J
ZCwgW3RoaXMsIHRyYW5zYWN0aW9uSWRdKGJvb2wpIHsKLSAgICAgICAgICAgIGlmIChtX2FjY2Vw
dGluZ05ld1JlcXVlc3RzICYmIG1fY29ubmVjdGlvbnMuaXNFbXB0eSgpICYmIG1fcGVuZGluZ1Ry
YW5zYWN0aW9uUm9sbGJhY2tzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIHNodXRkb3du
KExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBlOjpOb3JtYWxTaHV0ZG93bik7Ci0g
ICAgICAgICAgICAgICAgRGF0YWJhc2VQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAg
IH0pOwotfQotCi1TdHJpbmcgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OmFic29sdXRlRGF0YWJh
c2VEaXJlY3RvcnkoKSBjb25zdAotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0g
ICAgcmV0dXJuIERhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCkuYWJzb2x1dGVJbmRleGVkRGF0
YWJhc2VQYXRoRnJvbURhdGFiYXNlUmVsYXRpdmVQYXRoKG1fZGF0YWJhc2VSZWxhdGl2ZURpcmVj
dG9yeSk7Ci19Ci0KLXZvaWQgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2U6OnBvc3RNYWluVGhyZWFk
VGFzayhzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiB0YXNrLCBEYXRhYmFzZVRhc2tU
eXBlIHRhc2tUeXBlKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
aWYgKCFtX2FjY2VwdGluZ05ld1JlcXVlc3RzICYmIHRhc2tUeXBlID09IERhdGFiYXNlVGFza1R5
cGU6Ok5vcm1hbCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTG9ja0hvbGRlciBsb2NrZXIobV9t
YWluVGhyZWFkVGFza011dGV4KTsKLQotICAgIG1fbWFpblRocmVhZFRhc2tzLmFwcGVuZChXVEZN
b3ZlKHRhc2spKTsKLQotICAgIFJlZlB0cjxMZWdhY3lVbmlxdWVJREJEYXRhYmFzZT4gZGF0YWJh
c2UodGhpcyk7Ci0gICAgUnVuTG9vcDo6bWFpbigpLmRpc3BhdGNoKFtkYXRhYmFzZV0gewotICAg
ICAgICBkYXRhYmFzZS0+cGVyZm9ybU5leHRNYWluVGhyZWFkVGFzaygpOwotICAgIH0pOwotfQot
Ci1ib29sIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpwZXJmb3JtTmV4dE1haW5UaHJlYWRUYXNr
KCkKLXsKLSAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgYm9vbCBtb3JlVGFz
a3M7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRUYXNrPiB0YXNrOwotICAgIHsK
LSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9tYWluVGhyZWFkVGFza011dGV4KTsKLQotICAg
ICAgICAvLyBUaGlzIGRhdGFiYXNlIG1pZ2h0IGJlIHNodXR0aW5nIGRvd24sIGluIHdoaWNoIGNh
c2UgdGhlIHRhc2sgcXVldWUgbWlnaHQgYmUgZW1wdHkuCi0gICAgICAgIGlmIChtX21haW5UaHJl
YWRUYXNrcy5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
dGFzayA9IG1fbWFpblRocmVhZFRhc2tzLnRha2VGaXJzdCgpOwotICAgICAgICBtb3JlVGFza3Mg
PSAhbV9tYWluVGhyZWFkVGFza3MuaXNFbXB0eSgpOwotICAgIH0KLQotICAgIHRhc2stPnBlcmZv
cm1UYXNrKCk7Ci0KLSAgICByZXR1cm4gbW9yZVRhc2tzOwotfQotCi12b2lkIExlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6dW5pcXVlX3B0cjxDcm9zc1RocmVh
ZFRhc2s+IHRhc2ssIERhdGFiYXNlVGFza1R5cGUgdGFza1R5cGUpCi17Ci0gICAgQVNTRVJUKFJ1
bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGlmICghbV9hY2NlcHRpbmdOZXdSZXF1ZXN0cyAmJiB0
YXNrVHlwZSA9PSBEYXRhYmFzZVRhc2tUeXBlOjpOb3JtYWwpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fZGF0YWJhc2VUYXNrTXV0ZXgpOwotCi0gICAgbV9kYXRh
YmFzZVRhc2tzLmFwcGVuZChXVEZNb3ZlKHRhc2spKTsKLQotICAgIFJlZlB0cjxMZWdhY3lVbmlx
dWVJREJEYXRhYmFzZT4gZGF0YWJhc2UodGhpcyk7Ci0gICAgRGF0YWJhc2VQcm9jZXNzOjpzaW5n
bGV0b24oKS5xdWV1ZSgpLmRpc3BhdGNoKFtkYXRhYmFzZV0gewotICAgICAgICBkYXRhYmFzZS0+
cGVyZm9ybU5leHREYXRhYmFzZVRhc2soKTsKLSAgICB9KTsKLX0KLQotdm9pZCBMZWdhY3lVbmlx
dWVJREJEYXRhYmFzZTo6cGVyZm9ybU5leHREYXRhYmFzZVRhc2soKQotewotICAgIEFTU0VSVCgh
UnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGlzIGRh
dGFiYXNlIG1pZ2h0IGJlIHNodXR0aW5nIGRvd24gb24gdGhlIG1haW4gdGhyZWFkLgotICAgIC8v
IEluIHRoaXMgY2FzZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgcmVsZWFzaW5nIG1fZGF0YWJhc2VUYXNr
TXV0ZXgsIHRoaXMgZGF0YWJhc2UgbWlnaHQgZ2V0IGRlbGV0ZWQuCi0gICAgLy8gV2UgdGFrZSBh
IHJlZigpIHRvIG1ha2Ugc3VyZSB0aGUgZGF0YWJhc2UgaXMgc3RpbGwgbGl2ZSB3aGlsZSB0aGlz
IGxhc3QgdGFzayBpcyBwZXJmb3JtZWQuCi0gICAgUmVmUHRyPExlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlPiBwcm90ZWN0b3IodGhpcyk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NUaHJlYWRU
YXNrPiB0YXNrOwotICAgIHsKLSAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9kYXRhYmFzZVRh
c2tNdXRleCk7Ci0KLSAgICAgICAgLy8gVGhpcyBkYXRhYmFzZSBtaWdodCBiZSBzaHV0dGluZyBk
b3duIG9uIHRoZSBtYWluIHRocmVhZCwgaW4gd2hpY2ggY2FzZSB0aGUgdGFzayBxdWV1ZSBtaWdo
dCBiZSBlbXB0eS4KLSAgICAgICAgaWYgKG1fZGF0YWJhc2VUYXNrcy5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdGFzayA9IG1fZGF0YWJhc2VUYXNrcy50YWtlRmly
c3QoKTsKLSAgICB9Ci0KLSAgICB0YXNrLT5wZXJmb3JtVGFzaygpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFC
TEUoREFUQUJBU0VfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvTGVnYWN5VW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvTGVnYWN5VW5pcXVlSURCRGF0YWJhc2UuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTAyM2NlYS4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0xlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VfaAotI2RlZmluZSBMZWdhY3lVbmlxdWVJREJEYXRh
YmFzZV9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNF
X1BST0NFU1MpCi0KLSNpbmNsdWRlICJBc3luY1JlcXVlc3QuaCIKLSNpbmNsdWRlICJJREJJZGVu
dGlmaWVyLmgiCi0jaW5jbHVkZSAiTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmgi
Ci0jaW5jbHVkZSA8V2ViQ29yZS9JREJEYXRhYmFzZUJhY2tlbmQuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0luZGV4ZWREQi5oPgotI2luY2x1ZGUgPGZ1bmN0aW9uYWw+Ci0jaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBJUEMgewotY2xhc3MgRGF0YVJlZmVyZW5jZTsKLX0KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ3Jvc3NUaHJlYWRUYXNrOwotY2xhc3MgSURCR2V0
UmVzdWx0OwotY2xhc3MgSURCS2V5RGF0YTsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQotc3RydWN0
IElEQkRhdGFiYXNlTWV0YWRhdGE7Ci1zdHJ1Y3QgSURCS2V5UmFuZ2VEYXRhOwotc3RydWN0IFNl
Y3VyaXR5T3JpZ2luRGF0YTsKLX0KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIERhdGFi
YXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb247Ci1jbGFzcyBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZTsKLQotZW51bSBjbGFzcyBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlwZSB7
Ci0gICAgTm9ybWFsU2h1dGRvd24sCi0gICAgRGVsZXRlU2h1dGRvd24KLX07Ci0KLWNsYXNzIExl
Z2FjeVVuaXF1ZUlEQkRhdGFiYXNlIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPExlZ2Fj
eVVuaXF1ZUlEQkRhdGFiYXNlPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxMZWdhY3lVbmlx
dWVJREJEYXRhYmFzZT4gY3JlYXRlKGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRp
ZmllciYgaWRlbnRpZmllcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IExl
Z2FjeVVuaXF1ZUlEQkRhdGFiYXNlKGlkZW50aWZpZXIpKTsKLSAgICB9Ci0KLSAgICB+TGVnYWN5
VW5pcXVlSURCRGF0YWJhc2UoKTsKLQotICAgIHN0YXRpYyBTdHJpbmcgY2FsY3VsYXRlQWJzb2x1
dGVEYXRhYmFzZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYgYWJzb2x1dGVEYXRhYmFzZURpcmVjdG9y
eSk7Ci0KLSAgICBjb25zdCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50
aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLQotICAgIHZvaWQgcmVnaXN0
ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mKTsKLSAgICB2b2lkIHVu
cmVnaXN0ZXJDb25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mKTsKLQotICAg
IHZvaWQgZGVsZXRlRGF0YWJhc2Uoc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0Nh
bGxiYWNrKTsKLQotICAgIHZvaWQgZ2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHN0
ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCwgY29uc3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0
YSYpPiBjb21wbGV0aW9uQ2FsbGJhY2spOwotCi0gICAgdm9pZCBvcGVuVHJhbnNhY3Rpb24oY29u
c3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8aW50
NjRfdD4mIG9iamVjdFN0b3JlSURzLCBXZWJDb3JlOjpJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9k
ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICB2b2lk
IGJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spOwotICAgIHZv
aWQgY29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spOwotICAg
IHZvaWQgcmVzZXRUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFjayk7Ci0g
ICAgdm9pZCByb2xsYmFja1RyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgc3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNr
KTsKLQotICAgIHZvaWQgY2hhbmdlRGF0YWJhc2VWZXJzaW9uKGNvbnN0IElEQklkZW50aWZpZXIm
IHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0X3QgbmV3VmVyc2lvbiwgc3RkOjpmdW5jdGlv
bjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICB2b2lkIGNyZWF0ZU9iamVjdFN0
b3JlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+
IHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwg
c3RkOjpmdW5jdGlvbjx2b2lkIChib29sKT4gc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICB2b2lkIGNs
ZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVy
LCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nl
c3NDYWxsYmFjayk7Ci0gICAgdm9pZCBjcmVhdGVJbmRleChjb25zdCBJREJJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29y
ZTo6SURCSW5kZXhNZXRhZGF0YSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3ND
YWxsYmFjayk7Ci0gICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElE
LCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGJvb2wpPiBzdWNjZXNzQ2FsbGJhY2spOwotCi0gICAgdm9p
ZCBwdXRSZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBp
bnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmLCBjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmIHZhbHVlLCBpbnQ2NF90IHB1dE1vZGUsIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYgaW5kZXhJRHMsIGNvbnN0IFZlY3RvcjxWZWN0b3I8V2ViQ29yZTo6SURCS2V5RGF0
YT4+JiBpbmRleEtleXMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgV2ViQ29yZTo6SURCS2V5
RGF0YSYsIHVpbnQzMl90LCBjb25zdCBTdHJpbmcmKT4gY2FsbGJhY2spOwotICAgIHZvaWQgZ2V0
UmVjb3JkKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRf
dCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0IFdlYkNvcmU6OklEQktleVJh
bmdlRGF0YSYsIFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgc3RkOjpmdW5jdGlvbjx2
b2lkIChjb25zdCBXZWJDb3JlOjpJREJHZXRSZXN1bHQmLCB1aW50MzJfdCwgY29uc3QgU3RyaW5n
Jik+IGNhbGxiYWNrKTsKLQotICAgIHZvaWQgb3BlbkN1cnNvcihjb25zdCBJREJJZGVudGlmaWVy
JiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBp
bmRleElELCBXZWJDb3JlOjpJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwgV2ViQ29yZTo6SW5k
ZXhlZERCOjpDdXJzb3JUeXBlLCBXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBl
LCBjb25zdCBXZWJDb3JlOjpJREJLZXlSYW5nZURhdGEmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGlu
dDY0X3QsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmLCBjb25zdCBXZWJDb3JlOjpJREJLZXlE
YXRhJiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCB1aW50MzJfdCwgY29uc3Qg
U3RyaW5nJik+IGNhbGxiYWNrKTsKLSAgICB2b2lkIGN1cnNvckFkdmFuY2UoY29uc3QgSURCSWRl
bnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgdWludDY0X3QgY291bnQsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYsIGNvbnN0IFdlYkNvcmU6OklEQktleURh
dGEmLCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4sIHVpbnQzMl90LCBjb25zdCBT
dHJpbmcmKT4gY2FsbGJhY2spOwotICAgIHZvaWQgY3Vyc29ySXRlcmF0ZShjb25zdCBJREJJZGVu
dGlmaWVyJiBjdXJzb3JJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgc3Rk
OjpmdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgY29uc3QgV2ViQ29y
ZTo6SURCS2V5RGF0YSYsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiwgdWludDMy
X3QsIGNvbnN0IFN0cmluZyYpPiBjYWxsYmFjayk7Ci0KLSAgICB2b2lkIGNvdW50KGNvbnN0IElE
QklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlE
LCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0IFdlYkNvcmU6OklEQktleVJhbmdlRGF0YSYsIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoaW50NjRfdCwgdWludDMyX3QsIGNvbnN0IFN0cmluZyYpPiBjYWxsYmFj
ayk7Ci0gICAgdm9pZCBkZWxldGVSYW5nZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5
UmFuZ2VEYXRhJiwgc3RkOjpmdW5jdGlvbjx2b2lkICh1aW50MzJfdCwgY29uc3QgU3RyaW5nJik+
IGNhbGxiYWNrKTsKLQotcHJpdmF0ZToKLSAgICBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZShjb25z
dCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKLQotICAgIExlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlSWRlbnRpZmllciBtX2lkZW50aWZpZXI7Ci0KLSAgICBib29sIG1faW5NZW1v
cnk7Ci0gICAgU3RyaW5nIG1fZGF0YWJhc2VSZWxhdGl2ZURpcmVjdG9yeTsKLQotICAgIEhhc2hT
ZXQ8UmVmUHRyPERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24+PiBtX2Nvbm5lY3Rpb25zOwot
ICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX2RhdGFiYXNlUmVx
dWVzdHM7Ci0KLSAgICBTdHJpbmcgYWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0Owot
Ci0gICAgZW51bSBjbGFzcyBEYXRhYmFzZVRhc2tUeXBlIHsKLSAgICAgICAgTm9ybWFsLAotICAg
ICAgICBTaHV0ZG93bgotICAgIH07Ci0gICAgdm9pZCBwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpDcm9zc1RocmVhZFRhc2s+LCBEYXRhYmFzZVRhc2tUeXBlID0gRGF0
YWJhc2VUYXNrVHlwZTo6Tm9ybWFsKTsKLQotICAgIHZvaWQgc2h1dGRvd24oTGVnYWN5VW5pcXVl
SURCRGF0YWJhc2VTaHV0ZG93blR5cGUpOwotCi0gICAgLy8gTWV0aG9kIHRoYXQgYXR0ZW1wdHMg
dG8gbWFrZSBsZWdhbCBmaWxlbmFtZXMgZnJvbSBhbGwgbGVnYWwgZGF0YWJhc2UgbmFtZXMKLSAg
ICBTdHJpbmcgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoKSBjb25zdDsKLQotICAgIC8vIFJldHVy
bnMgYSBzdHJpbmcgdGhhdCBpcyBhcHByb3ByaWF0ZSBmb3IgdXNlIGFzIGEgdW5pcXVlIGZpbGVu
YW1lCi0gICAgU3RyaW5nIGRhdGFiYXNlRmlsZW5hbWVJZGVudGlmaWVyKGNvbnN0IFdlYkNvcmU6
OlNlY3VyaXR5T3JpZ2luRGF0YSYpIGNvbnN0OwotCi0gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
aXMgb3JpZ2luIGNhbiB1c2UgdGhlIHNhbWUgZGF0YWJhc2VzIGFzIHRoZSBnaXZlbiBvcmlnaW4u
Ci0gICAgYm9vbCBjYW5TaGFyZURhdGFiYXNlcyhjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEmLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmKSBjb25zdDsKLQotICAg
IHZvaWQgcG9zdFRyYW5zYWN0aW9uT3BlcmF0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5z
YWN0aW9uSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkNyb3NzVGhyZWFkVGFz
az4sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoYm9vbCk+IHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgCi0g
ICAgLy8gVG8gYmUgY2FsbGVkIGZyb20gdGhlIGRhdGFiYXNlIHdvcmtxdWV1ZSB0aHJlYWQgb25s
eQotICAgIHZvaWQgcGVyZm9ybU5leHREYXRhYmFzZVRhc2soKTsKLSAgICB2b2lkIHBvc3RNYWlu
VGhyZWFkVGFzayhzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrPiwgRGF0
YWJhc2VUYXNrVHlwZSA9IERhdGFiYXNlVGFza1R5cGU6Ok5vcm1hbCk7Ci0gICAgdm9pZCBvcGVu
QmFja2luZ1N0b3JlQW5kUmVhZE1ldGFkYXRhKGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNl
SWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOwotICAgIHZvaWQg
b3BlbkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlEcywgV2Vi
Q29yZTo6SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpOwotICAgIHZvaWQgYmVnaW5CYWNraW5n
U3RvcmVUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJik7Ci0gICAgdm9pZCBjb21taXRC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJik7Ci0gICAgdm9pZCBy
ZXNldEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImKTsKLSAgICB2
b2lkIHJvbGxiYWNrQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYp
OwotCi0gICAgdm9pZCBjaGFuZ2VEYXRhYmFzZVZlcnNpb25JbkJhY2tpbmdTdG9yZSh1aW50NjRf
dCByZXF1ZXN0SUQsIGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
dWludDY0X3QgbmV3VmVyc2lvbik7Ci0gICAgdm9pZCBjcmVhdGVPYmplY3RTdG9yZUluQmFja2lu
Z1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJREJPYmplY3RTdG9yZU1ldGFkYXRhJik7Ci0g
ICAgdm9pZCBkZWxldGVPYmplY3RTdG9yZUluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9i
amVjdFN0b3JlSUQpOwotICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZUluQmFja2luZ1N0b3JlKHVp
bnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpOwotCi0gICAgdm9pZCBjcmVhdGVJbmRleEluQmFj
a2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklE
QkluZGV4TWV0YWRhdGEmKTsKLSAgICB2b2lkIGRlbGV0ZUluZGV4SW5CYWNraW5nU3RvcmUodWlu
dDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElEKTsKLQotICAgIHZvaWQg
cHV0UmVjb3JkSW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBJREJJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OklEQk9iamVjdFN0
b3JlTWV0YWRhdGEmLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiB2YWx1ZSwgaW50NjRfdCBwdXRNb2RlLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGlu
ZGV4SURzLCBjb25zdCBWZWN0b3I8VmVjdG9yPFdlYkNvcmU6OklEQktleURhdGE+PiYgaW5kZXhL
ZXlzKTsKLSAgICB2b2lkIGdldFJlY29yZEZyb21CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVz
dElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0IFdl
YkNvcmU6OklEQktleVJhbmdlRGF0YSYsIFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vyc29yVHlwZSk7
Ci0gICAgdm9pZCBvcGVuQ3Vyc29ySW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElELCBj
b25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0
U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBXZWJDb3JlOjpJbmRleGVkREI6OkN1cnNvckRpcmVj
dGlvbiwgV2ViQ29yZTo6SW5kZXhlZERCOjpDdXJzb3JUeXBlLCBXZWJDb3JlOjpJREJEYXRhYmFz
ZUJhY2tlbmQ6OlRhc2tUeXBlLCBjb25zdCBXZWJDb3JlOjpJREJLZXlSYW5nZURhdGEmKTsKLSAg
ICB2b2lkIGFkdmFuY2VDdXJzb3JJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNv
bnN0IElEQklkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIHVpbnQ2NF90IGNvdW50KTsKLSAg
ICB2b2lkIGl0ZXJhdGVDdXJzb3JJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNv
bnN0IElEQklkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OklEQktl
eURhdGEmKTsKLSAgICB2b2lkIGNvdW50SW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVzdElE
LCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlSYW5nZURh
dGEmKTsKLSAgICB2b2lkIGRlbGV0ZVJhbmdlSW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVz
dElELCBjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qg
b2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5UmFuZ2VEYXRhJik7Ci0KLSAgICB2
b2lkIHNodXRkb3duQmFja2luZ1N0b3JlKExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25U
eXBlLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KTsKLQotICAgIC8vIENhbGxiYWNr
cyBmcm9tIHRoZSBkYXRhYmFzZSB3b3JrcXVldWUgdGhyZWFkLCB0byBiZSBwZXJmb3JtZWQgb24g
dGhlIG1haW4gdGhyZWFkIG9ubHkKLSAgICBib29sIHBlcmZvcm1OZXh0TWFpblRocmVhZFRhc2so
KTsKLSAgICB2b2lkIGRpZE9wZW5CYWNraW5nU3RvcmVBbmRSZWFkTWV0YWRhdGEoY29uc3QgV2Vi
Q29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYsIGJvb2wgc3VjY2Vzcyk7Ci0gICAgdm9pZCBkaWRD
b21wbGV0ZVRyYW5zYWN0aW9uT3BlcmF0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgYm9vbCBzdWNjZXNzKTsKLSAgICB2b2lkIGRpZENoYW5nZURhdGFiYXNl
VmVyc2lvbih1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vzcyk7Ci0gICAgdm9pZCBkaWRD
cmVhdGVPYmplY3RTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vzcyk7Ci0gICAg
dm9pZCBkaWREZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vz
cyk7Ci0gICAgdm9pZCBkaWRDbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9v
bCBzdWNjZXNzKTsKLSAgICB2b2lkIGRpZENyZWF0ZUluZGV4KHVpbnQ2NF90IHJlcXVlc3RJRCwg
Ym9vbCBzdWNjZXNzKTsKLSAgICB2b2lkIGRpZERlbGV0ZUluZGV4KHVpbnQ2NF90IHJlcXVlc3RJ
RCwgYm9vbCBzdWNjZXNzKTsKLSAgICB2b2lkIGRpZFB1dFJlY29yZEluQmFja2luZ1N0b3JlKHVp
bnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYsIHVpbnQzMl90IGVy
cm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotICAgIHZvaWQgZGlkR2V0UmVj
b3JkRnJvbUJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNvcmU6OklE
QkdldFJlc3VsdCYsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpOwotICAgIHZvaWQgZGlkT3BlbkN1cnNvckluQmFja2luZ1N0b3JlKHVpbnQ2NF90IHJlcXVl
c3RJRCwgaW50NjRfdCBjdXJzb3JJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYsIGNvbnN0
IFdlYkNvcmU6OklEQktleURhdGEmLCBjb25zdCBWZWN0b3I8dWludDhfdD4mLCB1aW50MzJfdCBl
cnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLSAgICB2b2lkIGRpZEFkdmFu
Y2VDdXJzb3JJbkJhY2tpbmdTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFdlYkNvcmU6
OklEQktleURhdGEmLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgY29uc3QgVmVjdG9yPHVp
bnQ4X3Q+JiwgdWludDMyX3QgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7
Ci0gICAgdm9pZCBkaWRJdGVyYXRlQ3Vyc29ySW5CYWNraW5nU3RvcmUodWludDY0X3QgcmVxdWVz
dElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0
YSYsIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3Ry
aW5nJiBlcnJvck1lc3NhZ2UpOwotICAgIHZvaWQgZGlkQ291bnRJbkJhY2tpbmdTdG9yZSh1aW50
NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgY291bnQsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotICAgIHZvaWQgZGlkRGVsZXRlUmFuZ2VJbkJhY2tpbmdT
dG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5n
JiBlcnJvck1lc3NhZ2UpOwotCi0gICAgdm9pZCBkaWRTaHV0ZG93bkJhY2tpbmdTdG9yZShMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlwZSk7Ci0gICAgdm9pZCBkaWRDb21wbGV0ZUJv
b2xSZXF1ZXN0KHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKTsKLQotICAgIHZvaWQg
ZGlkRXN0YWJsaXNoVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBib29sIHN1Y2Nlc3MpOwotICAgIHZvaWQgZGlkUmVzZXRUcmFuc2FjdGlvbihj
b25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGJvb2wgc3VjY2Vzcyk7
Ci0gICAgdm9pZCByZXNldEFsbFRyYW5zYWN0aW9ucyhjb25zdCBEYXRhYmFzZVByb2Nlc3NJREJD
b25uZWN0aW9uJik7Ci0gICAgdm9pZCBmaW5hbGl6ZVJvbGxiYWNrKGNvbnN0IElEQklkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWQpOwotCi0gICAgYm9vbCBtX2FjY2VwdGluZ05ld1JlcXVlc3RzOwot
Ci0gICAgSGFzaE1hcDxjb25zdCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uKiwgSGFzaFNl
dDxJREJJZGVudGlmaWVyPj4gbV9lc3RhYmxpc2hlZFRyYW5zYWN0aW9uczsKLSAgICBEZXF1ZTxS
ZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9wZW5kaW5nTWV0YWRhdGFSZXF1ZXN0czsKLSAgICBIYXNo
TWFwPElEQklkZW50aWZpZXIsIFJlZlB0cjxBc3luY1JlcXVlc3Q+PiBtX3BlbmRpbmdUcmFuc2Fj
dGlvblJlcXVlc3RzOwotICAgIEhhc2hTZXQ8SURCSWRlbnRpZmllcj4gbV9wZW5kaW5nVHJhbnNh
Y3Rpb25Sb2xsYmFja3M7Ci0gICAgQXN5bmNSZXF1ZXN0TWFwIG1fcGVuZGluZ0RhdGFiYXNlVGFz
a3M7Ci0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gbV9wZW5kaW5nU2h1dGRvd25UYXNrOwotCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGE+IG1fbWV0YWRh
dGE7Ci0gICAgYm9vbCBtX2RpZEdldE1ldGFkYXRhRnJvbUJhY2tpbmdTdG9yZTsKLQotICAgIFJl
ZlB0cjxVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7Ci0KLSAg
ICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrPj4gbV9kYXRh
YmFzZVRhc2tzOwotICAgIExvY2sgbV9kYXRhYmFzZVRhc2tNdXRleDsKLQotICAgIERlcXVlPHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpDcm9zc1RocmVhZFRhc2s+PiBtX21haW5UaHJlYWRUYXNr
czsKLSAgICBMb2NrIG1fbWFpblRocmVhZFRhc2tNdXRleDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShE
QVRBQkFTRV9QUk9DRVNTKQotI2VuZGlmIC8vIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvTGVnYWN5
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2U0MTcxNi4uMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0xlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJMZWdhY3lVbmlxdWVJREJEYXRh
YmFzZUlkZW50aWZpZXIuaCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFC
TEUoREFUQUJBU0VfUFJPQ0VTUykKLQotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLUxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRp
Zmllcjo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyKCkKLXsKLX0KLQotTGVnYWN5
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyOjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YSYgb3BlbmluZ09yaWdpbiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5E
YXRhJiBtYWluRnJhbWVPcmlnaW4pCi0gICAgOiBtX2RhdGFiYXNlTmFtZShkYXRhYmFzZU5hbWUp
Ci0gICAgLCBtX29wZW5pbmdPcmlnaW4ob3BlbmluZ09yaWdpbikKLSAgICAsIG1fbWFpbkZyYW1l
T3JpZ2luKG1haW5GcmFtZU9yaWdpbikKLXsKLSAgICAvLyBXaGlsZSBpdCBpcyB2YWxpZCB0byBo
YXZlIGFuIGVtcHR5IGRhdGFiYXNlIG5hbWUsIGl0IGlzIG5vdCB2YWxpZCB0byBoYXZlIGEgbnVs
bCBvbmUuCi0gICAgQVNTRVJUKCFtX2RhdGFiYXNlTmFtZS5pc051bGwoKSk7Ci19Ci0KLUxlZ2Fj
eVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICA6IG1fZGF0YWJhc2VO
YW1lKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQotewotfQotCi1ib29sIExlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAot
ewotICAgIHJldHVybiBtX2RhdGFiYXNlTmFtZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwot
fQotCi11bnNpZ25lZCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI6Omhhc2goKSBj
b25zdAotewotICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1s3XSA9IHsKLSAgICAgICAgbV9kYXRhYmFz
ZU5hbWUuaW1wbCgpID8gbV9kYXRhYmFzZU5hbWUuaW1wbCgpLT5oYXNoKCkgOiAwLAotICAgICAg
ICBtX29wZW5pbmdPcmlnaW4ucHJvdG9jb2wuaW1wbCgpID8gbV9vcGVuaW5nT3JpZ2luLnByb3Rv
Y29sLmltcGwoKS0+aGFzaCgpIDogMCwKLSAgICAgICAgbV9vcGVuaW5nT3JpZ2luLmhvc3QuaW1w
bCgpID8gbV9vcGVuaW5nT3JpZ2luLmhvc3QuaW1wbCgpLT5oYXNoKCkgOiAwLAotICAgICAgICBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9vcGVuaW5nT3JpZ2luLnBvcnQpLAotICAgICAgICBtX21h
aW5GcmFtZU9yaWdpbi5wcm90b2NvbC5pbXBsKCkgPyBtX21haW5GcmFtZU9yaWdpbi5wcm90b2Nv
bC5pbXBsKCktPmhhc2goKSA6IDAsCi0gICAgICAgIG1fbWFpbkZyYW1lT3JpZ2luLmhvc3QuaW1w
bCgpID8gbV9tYWluRnJhbWVPcmlnaW4uaG9zdC5pbXBsKCktPmhhc2goKSA6IDAsCi0gICAgICAg
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX21haW5GcmFtZU9yaWdpbi5wb3J0KQotICAgIH07Ci0g
ICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6aGFzaE1lbW9yeTxzaXplb2YoaGFzaENvZGVzKT4oaGFz
aENvZGVzKTsKLX0KLQotYm9vbCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI6Omlz
TnVsbCgpIGNvbnN0Ci17Ci0gICAgLy8gT25seSBhIGRlZmF1bHQgY29uc3RydWN0ZWQgTGVnYWN5
VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyIGNhbiBoYXZlIGEgbnVsbCBkYXRhYmFzZSBuYW1l
LgotICAgIHJldHVybiBtX2RhdGFiYXNlTmFtZS5pc051bGwoKTsKLX0KLQotTGVnYWN5VW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcjo6
aXNvbGF0ZWRDb3B5KCkgY29uc3QKLXsKLSAgICBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50
aWZpZXIgcmVzdWx0OwotCi0gICAgcmVzdWx0Lm1fZGF0YWJhc2VOYW1lID0gbV9kYXRhYmFzZU5h
bWUuaXNvbGF0ZWRDb3B5KCk7Ci0gICAgcmVzdWx0Lm1fb3BlbmluZ09yaWdpbiA9IG1fb3Blbmlu
Z09yaWdpbi5pc29sYXRlZENvcHkoKTsKLSAgICByZXN1bHQubV9tYWluRnJhbWVPcmlnaW4gPSBt
X21haW5GcmFtZU9yaWdpbi5pc29sYXRlZENvcHkoKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZp
ZXImIGEsIGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgYikKLXsKLSAg
ICBpZiAoJmEgPT0gJmIpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGEuZGF0
YWJhc2VOYW1lKCkgPT0gYi5kYXRhYmFzZU5hbWUoKQotICAgICAgICAmJiBhLm9wZW5pbmdPcmln
aW4oKSA9PSBiLm9wZW5pbmdPcmlnaW4oKQotICAgICAgICAmJiBhLm1haW5GcmFtZU9yaWdpbigp
ID09IGIubWFpbkZyYW1lT3JpZ2luKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0j
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWRE
Qi9MZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVy
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMTY3YWEuLjAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9MZWdhY3lVbmlxdWVJREJE
YXRhYmFzZUlkZW50aWZpZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcl9oCi0jZGVm
aW5lIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcl9oCi0KLSNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCi0KLSNpbmNsdWRlIDxX
ZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIExlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllciB7Ci1wdWJsaWM6Ci0gICAgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyKCk7Ci0gICAgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyKGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmIG9w
ZW5pbmdPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYgbWFpbkZyYW1l
T3JpZ2luKTsKLQotICAgIGJvb2wgaXNOdWxsKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VOYW1lOyB9Ci0gICAgY29u
c3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJiBvcGVuaW5nT3JpZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcGVuaW5nT3JpZ2luOyB9Ci0gICAgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhJiBtYWluRnJhbWVPcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX21haW5GcmFtZU9yaWdp
bjsgfQotCi0gICAgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlVHlwZSk7Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0OwotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLQotICAgIExlZ2FjeVVuaXF1ZUlE
QkRhdGFiYXNlSWRlbnRpZmllciBpc29sYXRlZENvcHkoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAg
ICBTdHJpbmcgbV9kYXRhYmFzZU5hbWU7Ci0gICAgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRh
IG1fb3BlbmluZ09yaWdpbjsKLSAgICBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEgbV9tYWlu
RnJhbWVPcmlnaW47Ci19OwotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgTGVnYWN5VW5pcXVlSURC
RGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlm
aWVyJik7Ci0KLXN0cnVjdCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXJIYXNoIHsK
LSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlk
ZW50aWZpZXImIGlkZW50aWZpZXIpIHsgcmV0dXJuIGlkZW50aWZpZXIuaGFzaCgpOyB9Ci0gICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVy
JiBhLCBjb25zdCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXImIGIpIHsgcmV0dXJu
IGEgPT0gYjsgfQotICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gZmFsc2U7Ci19OwotCi1zdHJ1Y3QgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVySGFzaFRyYWl0cyA6IFdURjo6U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPExlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlSWRlbnRpZmllcj4gewotICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0lzRW1w
dHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKLSAgICBzdGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUoY29u
c3QgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpbmZvKSB7IHJldHVybiBpbmZv
LmlzTnVsbCgpOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotbmFtZXNwYWNlIFdU
RiB7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViS2l0OjpMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXI+IDogV2ViS2l0OjpMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlk
ZW50aWZpZXJIYXNoVHJhaXRzIHsgfTsKLXRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdl
YktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyPiB7Ci0gICAgdHlwZWRlZiBX
ZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllckhhc2ggSGFzaDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWVjIFdURgotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
ICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQotI2VuZGlmIC8vIExlZ2FjeVVuaXF1ZUlEQkRh
dGFiYXNlSWRlbnRpZmllcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzMTk5OTAuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVfaAotI2RlZmlu
ZSBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZV9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCi0KLSNpbmNsdWRlIDxXZWJDb3Jl
L0luZGV4ZWREQi5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLWNsYXNzIElEQkdldFJlc3VsdDsKLWNsYXNzIElEQktleTsKLWNsYXNzIElEQktl
eURhdGE7Ci1jbGFzcyBJREJLZXlSYW5nZTsKLWNsYXNzIFNoYXJlZEJ1ZmZlcjsKLQotc3RydWN0
IElEQkRhdGFiYXNlTWV0YWRhdGE7Ci1zdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YTsKLX0K
LQotbmFtZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIElEQklkZW50aWZpZXI7Ci0KLWNsYXNzIFVu
aXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlIDogcHVibGljIFJlZkNvdW50ZWQ8VW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmU+IHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5VbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZSgpIHsgfQotCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8
V2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YT4gZ2V0T3JFc3RhYmxpc2hNZXRhZGF0YSgpID0g
MDsKLQotICAgIHZpcnR1YWwgYm9vbCBlc3RhYmxpc2hUcmFuc2FjdGlvbihjb25zdCBJREJJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2Jq
ZWN0U3RvcmVJRHMsIFdlYkNvcmU6OkluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKSA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgY29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmll
ciYpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcmVzZXRUcmFuc2FjdGlvbihjb25zdCBJREJJZGVu
dGlmaWVyJikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCByb2xsYmFja1RyYW5zYWN0aW9uKGNvbnN0
IElEQklkZW50aWZpZXImKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgY2hhbmdlRGF0YWJhc2VW
ZXJzaW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgdWludDY0
X3QgbmV3VmVyc2lvbikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShj
b25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlTWV0YWRhdGEmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZU9i
amVjdFN0b3JlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50
NjRfdCBvYmplY3RTdG9yZUlEKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNsZWFyT2JqZWN0U3Rv
cmUoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9i
amVjdFN0b3JlSUQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoY29uc3QgSURC
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQs
IGNvbnN0IFdlYkNvcmU6OklEQkluZGV4TWV0YWRhdGEmKSA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGRlbGV0ZUluZGV4KGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
aW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQpID0gMDsKLQotICAgIHZpcnR1
YWwgYm9vbCBnZW5lcmF0ZUtleU51bWJlcihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCYgZ2VuZXJhdGVkS2V5
KSA9IDA7Ci0gICAgdmlydHVhbCBib29sIHVwZGF0ZUtleUdlbmVyYXRvck51bWJlcihjb25zdCBJ
REJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBrZXlOdW1iZXIsIGJvb2wgY2hlY2tDdXJyZW50KSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6
SURCS2V5RGF0YSYsIGJvb2wmIGtleUV4aXN0cykgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwdXRS
ZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90
IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmLCBjb25zdCB1aW50OF90
KiB2YWx1ZUJ1ZmZlciwgc2l6ZV90IHZhbHVlU2l6ZSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBw
dXRJbmRleFJlY29yZChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3JlOjpJ
REJLZXlEYXRhJiwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYgaW5kZXhLZXkpID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wgZ2V0SW5kZXhSZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNh
Y3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwg
Y29uc3QgV2ViQ29yZTo6SURCS2V5UmFuZ2VEYXRhJiwgV2ViQ29yZTo6SW5kZXhlZERCOjpDdXJz
b3JUeXBlLCBXZWJDb3JlOjpJREJHZXRSZXN1bHQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGRl
bGV0ZVJhbmdlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50
NjRfdCBvYmplY3RTdG9yZUlELCBjb25zdCBXZWJDb3JlOjpJREJLZXlSYW5nZURhdGEmKSA9IDA7
Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZVJlY29yZChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6
SURCS2V5RGF0YSYpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRLZXlSZWNvcmRGcm9tT2Jq
ZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2
NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleSYsIFJlZlB0cjxXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI+JiByZXN1bHQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZ2V0S2V5UmFu
Z2VSZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleVJh
bmdlJiwgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mIHJlc3VsdCwgUmVmUHRyPFdlYkNv
cmU6OklEQktleT4mIHJlc3VsdEtleSkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjb3VudChjb25z
dCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlSYW5nZURhdGEmLCBp
bnQ2NF90JiBjb3VudCkgPSAwOwotCi0gICAgdmlydHVhbCBib29sIG9wZW5DdXJzb3IoY29uc3Qg
SURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SUQsIGludDY0X3QgaW5kZXhJRCwgV2ViQ29yZTo6SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24s
IFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kOjpUYXNrVHlwZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UmFuZ2VEYXRhJiwgaW50NjRfdCYg
Y3Vyc29ySUQsIFdlYkNvcmU6OklEQktleURhdGEmLCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgVmVj
dG9yPHVpbnQ4X3Q+JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBhZHZhbmNlQ3Vyc29yKGNvbnN0
IElEQklkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIHVpbnQ2NF90IGNvdW50LCBXZWJDb3Jl
OjpJREJLZXlEYXRhJiwgV2ViQ29yZTo6SURCS2V5RGF0YSYsIFZlY3Rvcjx1aW50OF90PiYpID0g
MDsKLSAgICB2aXJ0dWFsIGJvb2wgaXRlcmF0ZUN1cnNvcihjb25zdCBJREJJZGVudGlmaWVyJiBj
dXJzb3JJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgV2ViQ29yZTo6SURC
S2V5RGF0YSYsIFdlYkNvcmU6OklEQktleURhdGEmLCBWZWN0b3I8dWludDhfdD4mKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUN1cnNvcnNPZkNoYW5nZXMoY29uc3QgSURCSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpID0gMDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQotI2VuZGlmIC8vIFVuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub0NsaWVudC5o
CmluZGV4IGRlOTVkZTguLjdmZjE4OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9D
bGllbnQuaApAQCAtMzUsMTAgKzM1LDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJ
REJDdXJzb3JJbmZvOwogY2xhc3MgSURCSW5kZXhJbmZvOworY2xhc3MgSURCS2V5RGF0YTsKIGNs
YXNzIElEQk9iamVjdFN0b3JlSW5mbzsKIGNsYXNzIElEQlJlcXVlc3REYXRhOwogY2xhc3MgSURC
VHJhbnNhY3Rpb25JbmZvOwogY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOworc3RydWN0IElE
QktleVJhbmdlRGF0YTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJDdXJz
b3IuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUv
U1FMaXRlSURCQ3Vyc29yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ4NDky
My4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERC
L3NxbGl0ZS9TUUxpdGVJREJDdXJzb3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzkzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlNRTGl0ZUlEQkN1
cnNvci5oIgotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFT
RV9QUk9DRVNTKQotCi0jaW5jbHVkZSAiSURCU2VyaWFsaXphdGlvbi5oIgotI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKLSNpbmNsdWRlICJTUUxpdGVJREJUcmFuc2FjdGlvbi5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVUcmFuc2Fj
dGlvbi5oPgotI2luY2x1ZGUgPHNxbGl0ZTMuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1zdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCQ3Vyc29y
PiBTUUxpdGVJREJDdXJzb3I6Om1heWJlQ3JlYXRlKFNRTGl0ZUlEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiwgY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgaW50NjRfdCBv
YmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0aW9u
IGN1cnNvckRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1cnNvclR5cGUsIElEQkRh
dGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdGFza1R5cGUsIGNvbnN0IElEQktleVJhbmdlRGF0YSYg
a2V5UmFuZ2UpCi17Ci0gICAgYXV0byBjdXJzb3IgPSBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURC
Q3Vyc29yPihuZXcgU1FMaXRlSURCQ3Vyc29yKHRyYW5zYWN0aW9uLCBjdXJzb3JJZGVudGlmaWVy
LCBvYmplY3RTdG9yZUlELCBpbmRleElELCBjdXJzb3JEaXJlY3Rpb24sIGN1cnNvclR5cGUsIHRh
c2tUeXBlLCBrZXlSYW5nZSkpOwotCi0gICAgaWYgKCFjdXJzb3ItPmVzdGFibGlzaFN0YXRlbWVu
dCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghY3Vyc29yLT5hZHZhbmNl
KDEpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBjdXJzb3I7Ci19Ci0K
LVNRTGl0ZUlEQkN1cnNvcjo6U1FMaXRlSURCQ3Vyc29yKFNRTGl0ZUlEQlRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbiwgY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgaW50NjRf
dCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIEluZGV4ZWREQjo6Q3Vyc29yRGlyZWN0
aW9uIGN1cnNvckRpcmVjdGlvbiwgSW5kZXhlZERCOjpDdXJzb3JUeXBlLCBJREJEYXRhYmFzZUJh
Y2tlbmQ6OlRhc2tUeXBlLCBjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlKQotICAgIDog
bV90cmFuc2FjdGlvbih0cmFuc2FjdGlvbikKLSAgICAsIG1fY3Vyc29ySWRlbnRpZmllcihjdXJz
b3JJZGVudGlmaWVyKQotICAgICwgbV9vYmplY3RTdG9yZUlEKG9iamVjdFN0b3JlSUQpCi0gICAg
LCBtX2luZGV4SUQoaW5kZXhJRCkKLSAgICAsIG1fY3Vyc29yRGlyZWN0aW9uKGN1cnNvckRpcmVj
dGlvbikKLSAgICAsIG1fa2V5UmFuZ2Uoa2V5UmFuZ2UpCi0gICAgLCBtX2N1cnJlbnRSZWNvcmRJ
RCgtMSkKLSAgICAsIG1fc3RhdGVtZW50TmVlZHNSZXNldChmYWxzZSkKLSAgICAsIG1fYm91bmRJ
RCgwKQotICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCi0gICAgLCBtX2Vycm9yZWQoZmFsc2UpCi17
Ci0gICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVJRCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgYnVpbGRJ
bmRleFN0YXRlbWVudChjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlLCBJbmRleGVkREI6
OkN1cnNvckRpcmVjdGlvbiBjdXJzb3JEaXJlY3Rpb24pCi17Ci0gICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyOwotCi0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJTRUxFQ1Qgcm93aWQsIGtleSwg
dmFsdWUgRlJPTSBJbmRleFJlY29yZHMgV0hFUkUgaW5kZXhJRCA9ID8gQU5EIGtleSAiKTsKLSAg
ICBpZiAoIWtleVJhbmdlLmxvd2VyS2V5LmlzTnVsbCgpICYmICFrZXlSYW5nZS5sb3dlck9wZW4p
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPj0iKTsKLSAgICBlbHNlCi0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCc+Jyk7Ci0KLSAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIiBDQVNU
KD8gQVMgVEVYVCkgQU5EIGtleSAiKTsKLSAgICBpZiAoIWtleVJhbmdlLnVwcGVyS2V5LmlzTnVs
bCgpICYmICFrZXlSYW5nZS51cHBlck9wZW4pCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiPD0iKTsKLSAgICBlbHNlCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCc8Jyk7Ci0KLSAgICBi
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5Iik7Ci0g
ICAgaWYgKGN1cnNvckRpcmVjdGlvbiA9PSBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbjo6UHJl
diB8fCBjdXJzb3JEaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246OlByZXZO
b0R1cGxpY2F0ZSkKLSAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgREVTQyIpOwotCi0g
ICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsIHZhbHVlIik7Ci0gICAgaWYgKGN1cnNvckRpcmVj
dGlvbiA9PSBJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbjo6UHJldikKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIgREVTQyIpOwotCi0gICAgYnVpbGRlci5hcHBlbmQoJzsnKTsKLQot
ICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgYnVpbGRP
YmplY3RTdG9yZVN0YXRlbWVudChjb25zdCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlLCBJbmRl
eGVkREI6OkN1cnNvckRpcmVjdGlvbiBjdXJzb3JEaXJlY3Rpb24pCi17Ci0gICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOwotCi0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJTRUxFQ1Qgcm93aWQs
IGtleSwgdmFsdWUgRlJPTSBSZWNvcmRzIFdIRVJFIG9iamVjdFN0b3JlSUQgPSA/IEFORCBrZXkg
Iik7Ci0KLSAgICBpZiAoIWtleVJhbmdlLmxvd2VyS2V5LmlzTnVsbCgpICYmICFrZXlSYW5nZS5s
b3dlck9wZW4pCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiPj0iKTsKLSAgICBlbHNl
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCc+Jyk7Ci0KLSAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoIiBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSAiKTsKLQotICAgIGlmICgha2V5UmFuZ2UudXBw
ZXJLZXkuaXNOdWxsKCkgJiYgIWtleVJhbmdlLnVwcGVyT3BlbikKLSAgICAgICAgYnVpbGRlci5h
cHBlbmRMaXRlcmFsKCI8PSIpOwotICAgIGVsc2UKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJzwn
KTsKLQotICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIENBU1QoPyBBUyBURVhUKSBPUkRFUiBC
WSBrZXkiKTsKLQotICAgIGlmIChjdXJzb3JEaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJzb3JE
aXJlY3Rpb246OlByZXYgfHwgY3Vyc29yRGlyZWN0aW9uID09IEluZGV4ZWREQjo6Q3Vyc29yRGly
ZWN0aW9uOjpQcmV2Tm9EdXBsaWNhdGUpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
IERFU0MiKTsKLQotICAgIGJ1aWxkZXIuYXBwZW5kKCc7Jyk7Ci0KLSAgICByZXR1cm4gYnVpbGRl
ci50b1N0cmluZygpOwotfQotCi1ib29sIFNRTGl0ZUlEQkN1cnNvcjo6ZXN0YWJsaXNoU3RhdGVt
ZW50KCkKLXsKLSAgICBBU1NFUlQoIW1fc3RhdGVtZW50KTsKLSAgICBTdHJpbmcgc3FsOwotCi0g
ICAgaWYgKG1faW5kZXhJRCAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKLSAgICAg
ICAgc3FsID0gYnVpbGRJbmRleFN0YXRlbWVudChtX2tleVJhbmdlLCBtX2N1cnNvckRpcmVjdGlv
bik7Ci0gICAgICAgIG1fYm91bmRJRCA9IG1faW5kZXhJRDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBzcWwgPSBidWlsZE9iamVjdFN0b3JlU3RhdGVtZW50KG1fa2V5UmFuZ2UsIG1fY3Vyc29yRGly
ZWN0aW9uKTsKLSAgICAgICAgbV9ib3VuZElEID0gbV9vYmplY3RTdG9yZUlEOwotICAgIH0KLQot
ICAgIG1fY3VycmVudExvd2VyS2V5ID0gbV9rZXlSYW5nZS5sb3dlcktleS5pc051bGwoKSA/IElE
QktleURhdGE6Om1pbmltdW0oKSA6IG1fa2V5UmFuZ2UubG93ZXJLZXk7Ci0gICAgbV9jdXJyZW50
VXBwZXJLZXkgPSBtX2tleVJhbmdlLnVwcGVyS2V5LmlzTnVsbCgpID8gSURCS2V5RGF0YTo6bWF4
aW11bSgpIDogbV9rZXlSYW5nZS51cHBlcktleTsKLQotICAgIHJldHVybiBjcmVhdGVTUUxpdGVT
dGF0ZW1lbnQoc3FsKTsKLX0KLQotYm9vbCBTUUxpdGVJREJDdXJzb3I6OmNyZWF0ZVNRTGl0ZVN0
YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKLXsKLSAgICBMT0coSURCLCAiQ3JlYXRpbmcgY3Vy
c29yIHdpdGggU1FMIHF1ZXJ5OiBcIiVzXCIiLCBzcWwudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBB
U1NFUlQoIW1fY3VycmVudExvd2VyS2V5LmlzTnVsbCgpKTsKLSAgICBBU1NFUlQoIW1fY3VycmVu
dFVwcGVyS2V5LmlzTnVsbCgpKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+c3FsaXRlVHJh
bnNhY3Rpb24oKSk7Ci0KLSAgICBtX3N0YXRlbWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRl
U3RhdGVtZW50PihtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgp
LCBzcWwpOwotCi0gICAgaWYgKG1fc3RhdGVtZW50LT5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7
Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBjdXJzb3Igc3RhdGVtZW50IChw
cmVwYXJlL2lkKSAtICclcyciLCBtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5k
YXRhYmFzZSgpLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIHJldHVybiBiaW5kQXJndW1lbnRzKCk7Ci19Ci0KLXZvaWQgU1FMaXRlSURCQ3Vyc29y
OjpvYmplY3RTdG9yZVJlY29yZHNDaGFuZ2VkKCkKLXsKLSAgICAvLyBJZiBPYmplY3RTdG9yZSBv
ciBJbmRleCBjb250ZW50cyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBzdGF0ZW1lbnQg
YW5kIGJpbmQgbmV3IHBhcmFtZXRlcnMgdG8gaXQuCi0gICAgLy8gVGhpcyBpcyB0byBwaWNrIHVw
IGFueSBjaGFuZ2VzIHRoYXQgbWlnaHQgZXhpc3QuCi0KLSAgICBtX3N0YXRlbWVudE5lZWRzUmVz
ZXQgPSB0cnVlOwotfQotCi12b2lkIFNRTGl0ZUlEQkN1cnNvcjo6cmVzZXRBbmRSZWJpbmRTdGF0
ZW1lbnQoKQotewotICAgIEFTU0VSVCghbV9jdXJyZW50TG93ZXJLZXkuaXNOdWxsKCkpOwotICAg
IEFTU0VSVCghbV9jdXJyZW50VXBwZXJLZXkuaXNOdWxsKCkpOwotICAgIEFTU0VSVChtX3RyYW5z
YWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpKTsKLSAgICBBU1NFUlQobV9zdGF0ZW1lbnQpOwot
ICAgIEFTU0VSVChtX3N0YXRlbWVudE5lZWRzUmVzZXQpOwotCi0gICAgbV9zdGF0ZW1lbnROZWVk
c1Jlc2V0ID0gZmFsc2U7Ci0KLSAgICAvLyBJZiB0aGlzIGN1cnNvciBuZXZlciBmZXRjaGVkIGFu
eSByZWNvcmRzLCB3ZSBkb24ndCBuZWVkIHRvIHJlc2V0IHRoZSBzdGF0ZW1lbnQuCi0gICAgaWYg
KG1fY3VycmVudEtleS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT3RoZXJ3
aXNlIHVwZGF0ZSB0aGUgbG93ZXIga2V5IG9yIHVwcGVyIGtleSB1c2VkIGZvciB0aGUgY3Vyc29y
IHJhbmdlLgotICAgIC8vIFRoaXMgaXMgc28gdGhlIGN1cnNvciBjYW4gcGljayB1cCB3aGVyZSB3
ZSBsZWZ0IG9mZi4KLSAgICBpZiAobV9jdXJzb3JEaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb246Ok5leHQgfHwgbV9jdXJzb3JEaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb246Ok5leHROb0R1cGxpY2F0ZSkKLSAgICAgICAgbV9jdXJyZW50TG93ZXJLZXkg
PSBtX2N1cnJlbnRLZXk7Ci0gICAgZWxzZQotICAgICAgICBtX2N1cnJlbnRVcHBlcktleSA9IG1f
Y3VycmVudEtleTsKLQotICAgIGlmIChtX3N0YXRlbWVudC0+cmVzZXQoKSAhPSBTUUxJVEVfT0sp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcmVzZXQgY3Vyc29yIHN0YXRlbWVudCB0
byByZXNwb25kIHRvIG9iamVjdCBzdG9yZSBjaGFuZ2VzIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBiaW5kQXJndW1lbnRzKCk7Ci19Ci0KLWJvb2wgU1FMaXRlSURCQ3Vyc29yOjpi
aW5kQXJndW1lbnRzKCkKLXsKLSAgICBpZiAobV9zdGF0ZW1lbnQtPmJpbmRJbnQ2NCgxLCBtX2Jv
dW5kSUQpICE9IFNRTElURV9PSykgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBiaW5k
IGlkIGFyZ3VtZW50IChib3VuZCBJRCkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IHNlcmlhbGl6ZUlEQktleURhdGEo
bV9jdXJyZW50TG93ZXJLZXkpOwotICAgIGlmIChtX3N0YXRlbWVudC0+YmluZEJsb2IoMiwgYnVm
ZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSAhPSBTUUxJVEVfT0spIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIGN1cnNvciBzdGF0ZW1lbnQgKGxvd2VyIGtleSkiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJ1ZmZlciA9IHNlcmlhbGl6ZUlE
QktleURhdGEobV9jdXJyZW50VXBwZXJLZXkpOwotICAgIGlmIChtX3N0YXRlbWVudC0+YmluZEJs
b2IoMywgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKSAhPSBTUUxJVEVfT0spIHsKLSAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIGN1cnNvciBzdGF0ZW1lbnQgKHVwcGVy
IGtleSkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIFNRTGl0ZUlEQkN1cnNvcjo6YWR2YW5jZSh1aW50NjRfdCBjb3VudCkKLXsK
LSAgICBib29sIGlzVW5pcXVlID0gbV9jdXJzb3JEaXJlY3Rpb24gPT0gSW5kZXhlZERCOjpDdXJz
b3JEaXJlY3Rpb246Ok5leHROb0R1cGxpY2F0ZSB8fCBtX2N1cnNvckRpcmVjdGlvbiA9PSBJbmRl
eGVkREI6OkN1cnNvckRpcmVjdGlvbjo6UHJldk5vRHVwbGljYXRlOwotCi0gICAgZm9yICh1aW50
NjRfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKCFpc1VuaXF1ZSkgewot
ICAgICAgICAgICAgaWYgKCFhZHZhbmNlT25jZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmICghYWR2YW5jZVVuaXF1ZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFNRTGl0ZUlEQkN1cnNvcjo6YWR2YW5jZVVuaXF1ZSgp
Ci17Ci0gICAgSURCS2V5RGF0YSBjdXJyZW50S2V5ID0gbV9jdXJyZW50S2V5OwotCi0gICAgd2hp
bGUgKCFtX2NvbXBsZXRlZCkgewotICAgICAgICBpZiAoIWFkdmFuY2VPbmNlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gSWYgdGhlIG5ldyBjdXJyZW50IGtleSBp
cyBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIGN1cnJlbnQga2V5LCB3ZSdyZSBkb25lLgotICAgICAg
ICBpZiAoY3VycmVudEtleS5jb21wYXJlKG1fY3VycmVudEtleSkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgU1FMaXRlSURC
Q3Vyc29yOjphZHZhbmNlT25jZSgpCi17Ci0gICAgaWYgKG1fc3RhdGVtZW50TmVlZHNSZXNldCkK
LSAgICAgICAgcmVzZXRBbmRSZWJpbmRTdGF0ZW1lbnQoKTsKLQotICAgIEFkdmFuY2VSZXN1bHQg
cmVzdWx0OwotICAgIGRvIHsKLSAgICAgICAgcmVzdWx0ID0gaW50ZXJuYWxBZHZhbmNlT25jZSgp
OwotICAgIH0gd2hpbGUgKHJlc3VsdCA9PSBBZHZhbmNlUmVzdWx0OjpTaG91bGRBZHZhbmNlQWdh
aW4pOwotCi0gICAgcmV0dXJuIHJlc3VsdCA9PSBBZHZhbmNlUmVzdWx0OjpTdWNjZXNzOwotfQot
Ci1TUUxpdGVJREJDdXJzb3I6OkFkdmFuY2VSZXN1bHQgU1FMaXRlSURCQ3Vyc29yOjppbnRlcm5h
bEFkdmFuY2VPbmNlKCkKLXsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+c3FsaXRlVHJhbnNh
Y3Rpb24oKSk7Ci0gICAgQVNTRVJUKG1fc3RhdGVtZW50KTsKLQotICAgIGlmIChtX2NvbXBsZXRl
ZCkgewotICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gYWR2YW5jZSBhIGNvbXBsZXRlZCBj
dXJzb3IiKTsKLSAgICAgICAgcmV0dXJuIEFkdmFuY2VSZXN1bHQ6OkZhaWx1cmU7Ci0gICAgfQot
Ci0gICAgaW50IHJlc3VsdCA9IG1fc3RhdGVtZW50LT5zdGVwKCk7Ci0gICAgaWYgKHJlc3VsdCA9
PSBTUUxJVEVfRE9ORSkgewotICAgICAgICBtX2NvbXBsZXRlZCA9IHRydWU7Ci0KLSAgICAgICAg
Ly8gV2hlbiBhIGN1cnNvciByZWFjaGVzIGl0cyBlbmQsIHRoYXQgaXMgaW5kaWNhdGVkIGJ5IGhh
dmluZyB1bmRlZmluZWQga2V5cy92YWx1ZXMKLSAgICAgICAgbV9jdXJyZW50S2V5ID0gSURCS2V5
RGF0YSgpOwotICAgICAgICBtX2N1cnJlbnRQcmltYXJ5S2V5ID0gSURCS2V5RGF0YSgpOwotICAg
ICAgICBtX2N1cnJlbnRWYWx1ZUJ1ZmZlci5jbGVhcigpOwotCi0gICAgICAgIHJldHVybiBBZHZh
bmNlUmVzdWx0OjpTdWNjZXNzOwotICAgIH0KLQotICAgIGlmIChyZXN1bHQgIT0gU1FMSVRFX1JP
VykgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yIGFkdmFuY2luZyBjdXJzb3IgLSAoJWkpICVz
IiwgcmVzdWx0LCBtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlvbigpLT5kYXRhYmFzZSgp
Lmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwotICAgICAgICBt
X2Vycm9yZWQgPSB0cnVlOwotICAgICAgICByZXR1cm4gQWR2YW5jZVJlc3VsdDo6RmFpbHVyZTsK
LSAgICB9Ci0KLSAgICBpbnQ2NF90IHJlY29yZElEID0gbV9zdGF0ZW1lbnQtPmdldENvbHVtbklu
dDY0KDApOwotCi0gICAgLy8gSWYgdGhlIHJlY29yZElEIG9mIHRoZSByZWNvcmQganVzdCBmZXRj
aGVkIGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IHJlY29yZCBJRAotICAgIC8vIHRoZW4gdGhp
cyBzdGF0ZW1lbnQgbXVzdCBoYXZlIGJlZW4gcmUtcHJlcGFyZWQgaW4gcmVzcG9uc2UgdG8gYW4g
b2JqZWN0IHN0b3JlIGNoYW5nZS4KLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIHJlLXVzZSB0aGUg
Y3VycmVudCByZWNvcmQgc28gd2UnbGwgbW92ZSBvbiB0byB0aGUgbmV4dCBvbmUuCi0gICAgaWYg
KHJlY29yZElEID09IG1fY3VycmVudFJlY29yZElEKQotICAgICAgICByZXR1cm4gQWR2YW5jZVJl
c3VsdDo6U2hvdWxkQWR2YW5jZUFnYWluOwotCi0gICAgbV9jdXJyZW50UmVjb3JkSUQgPSByZWNv
cmRJRDsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBrZXlEYXRhOwotICAgIG1fc3RhdGVtZW50LT5n
ZXRDb2x1bW5CbG9iQXNWZWN0b3IoMSwga2V5RGF0YSk7Ci0KLSAgICBpZiAoIWRlc2VyaWFsaXpl
SURCS2V5RGF0YShrZXlEYXRhLmRhdGEoKSwga2V5RGF0YS5zaXplKCksIG1fY3VycmVudEtleSkp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZGVzZXJpYWxpemUga2V5IGRhdGEgZnJv
bSBkYXRhYmFzZSB3aGlsZSBhZHZhbmNpbmcgY3Vyc29yIik7Ci0gICAgICAgIG1fY29tcGxldGVk
ID0gdHJ1ZTsKLSAgICAgICAgbV9lcnJvcmVkID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIEFkdmFu
Y2VSZXN1bHQ6OkZhaWx1cmU7Ci0gICAgfQotCi0gICAgbV9zdGF0ZW1lbnQtPmdldENvbHVtbkJs
b2JBc1ZlY3RvcigyLCBrZXlEYXRhKTsKLSAgICBtX2N1cnJlbnRWYWx1ZUJ1ZmZlciA9IGtleURh
dGE7Ci0KLSAgICAvLyBUaGUgcHJpbWFyeUtleSBvZiBhbiBPYmplY3RTdG9yZSBjdXJzb3IgaXMg
dGhlIHNhbWUgYXMgaXRzIGtleS4KLSAgICBpZiAobV9pbmRleElEID09IElEQkluZGV4TWV0YWRh
dGE6OkludmFsaWRJZCkKLSAgICAgICAgbV9jdXJyZW50UHJpbWFyeUtleSA9IG1fY3VycmVudEtl
eTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFkZXNlcmlhbGl6ZUlEQktleURhdGEoa2V5RGF0
YS5kYXRhKCksIGtleURhdGEuc2l6ZSgpLCBtX2N1cnJlbnRQcmltYXJ5S2V5KSkgewotICAgICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZGVzZXJpYWxpemUgdmFsdWUgZGF0YSBmcm9tIGRh
dGFiYXNlIHdoaWxlIGFkdmFuY2luZyBpbmRleCBjdXJzb3IiKTsKLSAgICAgICAgICAgIG1fY29t
cGxldGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIG1fZXJyb3JlZCA9IHRydWU7Ci0gICAgICAgICAg
ICByZXR1cm4gQWR2YW5jZVJlc3VsdDo6RmFpbHVyZTsKLSAgICAgICAgfQotCi0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBvYmplY3RTdG9yZVN0YXRlbWVudChtX3N0YXRlbWVudC0+ZGF0YWJhc2Uo
KSwgIlNFTEVDVCB2YWx1ZSBGUk9NIFJlY29yZHMgV0hFUkUga2V5ID0gQ0FTVCg/IEFTIFRFWFQp
IGFuZCBvYmplY3RTdG9yZUlEID0gPzsiKTsKLQotICAgICAgICBpZiAob2JqZWN0U3RvcmVTdGF0
ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgb2JqZWN0U3RvcmVT
dGF0ZW1lbnQuYmluZEJsb2IoMSwgbV9jdXJyZW50VmFsdWVCdWZmZXIuZGF0YSgpLCBtX2N1cnJl
bnRWYWx1ZUJ1ZmZlci5zaXplKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgb2JqZWN0
U3RvcmVTdGF0ZW1lbnQuYmluZEludDY0KDIsIG1fb2JqZWN0U3RvcmVJRCkgIT0gU1FMSVRFX09L
KSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgaW5kZXggY3Vyc29y
IHN0YXRlbWVudCBpbnRvIG9iamVjdCBzdG9yZSByZWNvcmRzICglaSkgJyVzJyIsIG1fc3RhdGVt
ZW50LT5kYXRhYmFzZSgpLmxhc3RFcnJvcigpLCBtX3N0YXRlbWVudC0+ZGF0YWJhc2UoKS5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBtX2NvbXBsZXRlZCA9IHRydWU7Ci0gICAgICAgICAg
ICBtX2Vycm9yZWQgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIEFkdmFuY2VSZXN1bHQ6OkZh
aWx1cmU7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgcmVzdWx0ID0gb2JqZWN0U3RvcmVTdGF0
ZW1lbnQuc3RlcCgpOwotCi0gICAgICAgIGlmIChyZXN1bHQgPT0gU1FMSVRFX1JPVykKLSAgICAg
ICAgICAgIG9iamVjdFN0b3JlU3RhdGVtZW50LmdldENvbHVtbkJsb2JBc1ZlY3RvcigwLCBtX2N1
cnJlbnRWYWx1ZUJ1ZmZlcik7Ci0gICAgICAgIGVsc2UgaWYgKHJlc3VsdCA9PSBTUUxJVEVfRE9O
RSkgewotICAgICAgICAgICAgLy8gVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVjb3JkIHdlJ3Jl
IHRyeWluZyB0byByZXRyaWV2ZSBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIG9iamVjdCBzdG9y
ZS4KLSAgICAgICAgICAgIC8vIFNraXAgb3ZlciBpdC4KLSAgICAgICAgICAgIHJldHVybiBBZHZh
bmNlUmVzdWx0OjpTaG91bGRBZHZhbmNlQWdhaW47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBzdGVwIGluZGV4IGN1cnNvciBzdGF0ZW1lbnQgaW50
byBvYmplY3Qgc3RvcmUgcmVjb3JkcyAoJWkpICclcyciLCBtX3N0YXRlbWVudC0+ZGF0YWJhc2Uo
KS5sYXN0RXJyb3IoKSwgbV9zdGF0ZW1lbnQtPmRhdGFiYXNlKCkubGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwotICAgICAgICAgICAgbV9lcnJvcmVkID0g
dHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBBZHZhbmNlUmVzdWx0OjpGYWlsdXJlOwotCi0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gQWR2YW5jZVJlc3VsdDo6U3VjY2VzczsKLX0KLQot
Ym9vbCBTUUxpdGVJREJDdXJzb3I6Oml0ZXJhdGUoY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYg
dGFyZ2V0S2V5KQotewotICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uLT5zcWxpdGVUcmFuc2FjdGlv
bigpKTsKLSAgICBBU1NFUlQobV9zdGF0ZW1lbnQpOwotCi0gICAgYm9vbCByZXN1bHQgPSBhZHZh
bmNlKDEpOwotCi0gICAgLy8gSXRlcmF0aW5nIHdpdGggbm8ga2V5IGlzIGVxdWl2YWxlbnQgdG8g
YWR2YW5jaW5nIDEgc3RlcC4KLSAgICBpZiAodGFyZ2V0S2V5LmlzTnVsbCgpIHx8ICFyZXN1bHQp
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICB3aGlsZSAoIW1fY29tcGxldGVkKSB7Ci0g
ICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IC8vIFNlYXJjaCBmb3IgdGhlIG5leHQga2V5ID49IHRoZSB0YXJnZXQgaWYgdGhlIGN1cnNvciBp
cyBhIE5leHQgY3Vyc29yLCBvciB0aGUgbmV4dCBrZXkgPD0gaWYgdGhlIGN1cnNvciBpcyBhIFBy
ZXZpb3VzIGN1cnNvci4KLSAgICAgICAgaWYgKG1fY3Vyc29yRGlyZWN0aW9uID09IEluZGV4ZWRE
Qjo6Q3Vyc29yRGlyZWN0aW9uOjpOZXh0IHx8IG1fY3Vyc29yRGlyZWN0aW9uID09IEluZGV4ZWRE
Qjo6Q3Vyc29yRGlyZWN0aW9uOjpOZXh0Tm9EdXBsaWNhdGUpIHsKLSAgICAgICAgICAgIGlmICht
X2N1cnJlbnRLZXkuY29tcGFyZSh0YXJnZXRLZXkpID49IDApCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50S2V5LmNvbXBhcmUodGFyZ2V0S2V5KSA8
PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcmVzdWx0ID0gYWR2YW5jZSgxKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQK
LQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0Vf
UFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRl
eGVkREIvc3FsaXRlL1NRTGl0ZUlEQkN1cnNvci5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCQ3Vyc29yLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGM4NmI1ZDMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCQ3Vyc29yLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwot
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0jaWZuZGVmIFNRTGl0ZUlEQkN1cnNv
cl9oCi0jZGVmaW5lIFNRTGl0ZUlEQkN1cnNvcl9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCi0KLSNpbmNsdWRlICJJREJJZGVudGlm
aWVyLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JREJEYXRhYmFzZUJhY2tlbmQuaD4KLSNpbmNsdWRl
IDxXZWJDb3JlL0lEQktleURhdGEuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lEQktleVJhbmdlRGF0
YS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlU3RhdGVtZW50Lmg+Ci0jaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIEluZGV4
ZWREQiB7Ci1lbnVtIGNsYXNzIEN1cnNvckRpcmVjdGlvbjsKLWVudW0gY2xhc3MgQ3Vyc29yVHlw
ZTsKLX0KLQotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgU1FMaXRlSURCVHJhbnNh
Y3Rpb247Ci0KLWNsYXNzIFNRTGl0ZUlEQkN1cnNvciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoU1FMaXRlSURCQ3Vyc29yKTsKLQotcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8U1FMaXRlSURCQ3Vyc29yPiBtYXliZUNyZWF0ZShTUUxpdGVJREJUcmFuc2FjdGlvbiosIGNv
bnN0IElEQklkZW50aWZpZXImIGN1cnNvcklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
RCwgaW50NjRfdCBpbmRleElELCBXZWJDb3JlOjpJbmRleGVkREI6OkN1cnNvckRpcmVjdGlvbiwg
V2ViQ29yZTo6SW5kZXhlZERCOjpDdXJzb3JUeXBlLCBXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tl
bmQ6OlRhc2tUeXBlLCBjb25zdCBXZWJDb3JlOjpJREJLZXlSYW5nZURhdGEmKTsKLQotICAgIGNv
bnN0IElEQklkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnNvcklk
ZW50aWZpZXI7IH0KLSAgICBTUUxpdGVJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24oKSBjb25z
dCB7IHJldHVybiBtX3RyYW5zYWN0aW9uOyB9Ci0KLSAgICBpbnQ2NF90IG9iamVjdFN0b3JlSUQo
KSBjb25zdCB7IHJldHVybiBtX29iamVjdFN0b3JlSUQ7IH0KLQotICAgIGNvbnN0IFdlYkNvcmU6
OklEQktleURhdGEmIGN1cnJlbnRLZXkoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0K
LSAgICBjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiBjdXJyZW50UHJpbWFyeUtleSgpIGNvbnN0
IHsgcmV0dXJuIG1fY3VycmVudFByaW1hcnlLZXk7IH0KLSAgICBjb25zdCBWZWN0b3I8dWludDhf
dD4mIGN1cnJlbnRWYWx1ZUJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZhbHVlQnVm
ZmVyOyB9Ci0KLSAgICBib29sIGFkdmFuY2UodWludDY0X3QgY291bnQpOwotICAgIGJvb2wgaXRl
cmF0ZShjb25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiB0YXJnZXRLZXkpOwotCi0gICAgYm9vbCBk
aWRFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JlZDsgfQotCi0gICAgdm9pZCBvYmplY3RT
dG9yZVJlY29yZHNDaGFuZ2VkKCk7Ci0KLXByaXZhdGU6Ci0gICAgU1FMaXRlSURCQ3Vyc29yKFNR
TGl0ZUlEQlRyYW5zYWN0aW9uKiwgY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmll
ciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIFdlYkNvcmU6OkluZGV4
ZWREQjo6Q3Vyc29yRGlyZWN0aW9uLCBXZWJDb3JlOjpJbmRleGVkREI6OkN1cnNvclR5cGUsIFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUsIGNvbnN0IFdlYkNvcmU6OklEQktl
eVJhbmdlRGF0YSYpOwotCi0gICAgYm9vbCBlc3RhYmxpc2hTdGF0ZW1lbnQoKTsKLSAgICBib29s
IGNyZWF0ZVNRTGl0ZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCk7Ci0gICAgYm9vbCBiaW5k
QXJndW1lbnRzKCk7Ci0KLSAgICB2b2lkIHJlc2V0QW5kUmViaW5kU3RhdGVtZW50KCk7Ci0KLSAg
ICBlbnVtIGNsYXNzIEFkdmFuY2VSZXN1bHQgewotICAgICAgICBTdWNjZXNzLAotICAgICAgICBG
YWlsdXJlLAotICAgICAgICBTaG91bGRBZHZhbmNlQWdhaW4KLSAgICB9OwotCi0gICAgQWR2YW5j
ZVJlc3VsdCBpbnRlcm5hbEFkdmFuY2VPbmNlKCk7Ci0gICAgYm9vbCBhZHZhbmNlT25jZSgpOwot
ICAgIGJvb2wgYWR2YW5jZVVuaXF1ZSgpOwotCi0gICAgU1FMaXRlSURCVHJhbnNhY3Rpb24qIG1f
dHJhbnNhY3Rpb247Ci0gICAgSURCSWRlbnRpZmllciBtX2N1cnNvcklkZW50aWZpZXI7Ci0gICAg
aW50NjRfdCBtX29iamVjdFN0b3JlSUQ7Ci0gICAgaW50NjRfdCBtX2luZGV4SUQ7Ci0gICAgV2Vi
Q29yZTo6SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gbV9jdXJzb3JEaXJlY3Rpb247Ci0gICAg
V2ViQ29yZTo6SURCS2V5UmFuZ2VEYXRhIG1fa2V5UmFuZ2U7Ci0KLSAgICBXZWJDb3JlOjpJREJL
ZXlEYXRhIG1fY3VycmVudExvd2VyS2V5OwotICAgIFdlYkNvcmU6OklEQktleURhdGEgbV9jdXJy
ZW50VXBwZXJLZXk7Ci0KLSAgICBpbnQ2NF90IG1fY3VycmVudFJlY29yZElEOwotICAgIFdlYkNv
cmU6OklEQktleURhdGEgbV9jdXJyZW50S2V5OwotICAgIFdlYkNvcmU6OklEQktleURhdGEgbV9j
dXJyZW50UHJpbWFyeUtleTsKLSAgICBWZWN0b3I8dWludDhfdD4gbV9jdXJyZW50VmFsdWVCdWZm
ZXI7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6U1FMaXRlU3RhdGVtZW50PiBtX3N0
YXRlbWVudDsKLSAgICBib29sIG1fc3RhdGVtZW50TmVlZHNSZXNldDsKLSAgICBpbnQ2NF90IG1f
Ym91bmRJRDsKLQotICAgIGJvb2wgbV9jb21wbGV0ZWQ7Ci0gICAgYm9vbCBtX2Vycm9yZWQ7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKLSNlbmRpZiAvLyBTUUxpdGVJREJD
dXJzb3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9zcWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjkyZmMxLi4wMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1NRTGl0ZUlEQlRyYW5z
YWN0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJTUUxpdGVJREJUcmFuc2FjdGlvbi5oIgotCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQot
Ci0jaW5jbHVkZSAiU1FMaXRlSURCQ3Vyc29yLmgiCi0jaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGUuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0luZGV4ZWREQi5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvU1FMaXRlVHJhbnNhY3Rpb24uaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7Ci0KLXN0YXRpYyBpbnQ2NF90IG5leHRDdXJzb3JJRCA9IDE7Ci0KLW5hbWVzcGFj
ZSBXZWJLaXQgewotCi1TUUxpdGVJREJUcmFuc2FjdGlvbjo6U1FMaXRlSURCVHJhbnNhY3Rpb24o
VW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUmIGJhY2tpbmdTdG9yZSwgY29uc3Qg
SURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBJbmRleGVkREI6OlRyYW5zYWN0
aW9uTW9kZSBtb2RlKQotICAgIDogbV9pZGVudGlmaWVyKHRyYW5zYWN0aW9uSWRlbnRpZmllcikK
LSAgICAsIG1fbW9kZShtb2RlKQotICAgICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQot
ewotfQotCi1TUUxpdGVJREJUcmFuc2FjdGlvbjo6flNRTGl0ZUlEQlRyYW5zYWN0aW9uKCkKLXsK
LSAgICBpZiAoaW5Qcm9ncmVzcygpKQotICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5yb2xs
YmFjaygpOwotCi0gICAgLy8gRXhwbGljaXRseSBjbGVhciBjdXJzb3JzLCBhcyB0aGF0IGFsc28g
dW5yZWdpc3RlcnMgdGhlbSBmcm9tIHRoZSBiYWNraW5nIHN0b3JlLgotICAgIGNsZWFyQ3Vyc29y
cygpOwotfQotCi0KLWJvb2wgU1FMaXRlSURCVHJhbnNhY3Rpb246OmJlZ2luKFNRTGl0ZURhdGFi
YXNlJiBkYXRhYmFzZSkKLXsKLSAgICBBU1NFUlQoIW1fc3FsaXRlVHJhbnNhY3Rpb24pOwotICAg
IG1fc3FsaXRlVHJhbnNhY3Rpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFNRTGl0ZVRyYW5zYWN0aW9u
PihkYXRhYmFzZSwgbV9tb2RlID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25s
eSk7Ci0KLSAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5iZWdpbigpOwotCi0gICAgcmV0dXJuIG1f
c3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKTsKLX0KLQotYm9vbCBTUUxpdGVJREJUcmFu
c2FjdGlvbjo6Y29tbWl0KCkKLXsKLSAgICAvLyBJdCdzIG9rYXkgdG8gbm90IGhhdmUgYSBTUUxp
dGUgdHJhbnNhY3Rpb24gb3Igbm90IGhhdmUgc3RhcnRlZCBpdCB5ZXQgYmVjYXVzZSBpdCdzIG9r
YXkgZm9yIGEgV2ViUHJvY2VzcwotICAgIC8vIHRvIHJlcXVlc3QgdGhlIGNvbW1pdCBvZiBhIHRy
YW5zYWN0aW9uIGltbWVkaWF0ZWx5IGFmdGVyIGNyZWF0aW5nIGl0IGJlZm9yZSBpdCBoYXMgZXZl
biBiZWVuIHVzZWQuCi0gICAgaWYgKCFtX3NxbGl0ZVRyYW5zYWN0aW9uIHx8ICFtX3NxbGl0ZVRy
YW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1f
c3FsaXRlVHJhbnNhY3Rpb24tPmNvbW1pdCgpOwotCi0gICAgcmV0dXJuICFtX3NxbGl0ZVRyYW5z
YWN0aW9uLT5pblByb2dyZXNzKCk7Ci19Ci0KLWJvb2wgU1FMaXRlSURCVHJhbnNhY3Rpb246OnJl
c2V0KCkKLXsKLSAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uID0gbnVsbHB0cjsKLSAgICBjbGVhckN1
cnNvcnMoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFNRTGl0ZUlEQlRyYW5zYWN0
aW9uOjpyb2xsYmFjaygpCi17Ci0gICAgQVNTRVJUKG1fc3FsaXRlVHJhbnNhY3Rpb24pOwotICAg
IGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCi0gICAgICAgIG1fc3FsaXRl
VHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU1FMaXRl
SURCQ3Vyc29yKiBTUUxpdGVJREJUcmFuc2FjdGlvbjo6b3BlbkN1cnNvcihpbnQ2NF90IG9iamVj
dFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gY3Vy
c29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJh
c2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlS
YW5nZSkKLXsKLSAgICBBU1NFUlQobV9zcWxpdGVUcmFuc2FjdGlvbik7Ci0gICAgaWYgKCFtX3Nx
bGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgSURCSWRlbnRpZmllciBjdXJzb3JJZGVudGlmaWVyKG1faWRlbnRpZmllci5jb25uZWN0
aW9uKCksIG5leHRDdXJzb3JJRCsrKTsKLQotICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9jdXJzb3Jz
LmFkZChjdXJzb3JJZGVudGlmaWVyLCBTUUxpdGVJREJDdXJzb3I6Om1heWJlQ3JlYXRlKHRoaXMs
IGN1cnNvcklkZW50aWZpZXIsIG9iamVjdFN0b3JlSUQsIGluZGV4SUQsIGN1cnNvckRpcmVjdGlv
biwgY3Vyc29yVHlwZSwgdGFza1R5cGUsIGtleVJhbmdlKSk7Ci0KLSAgICBBU1NFUlQoYWRkUmVz
dWx0LmlzTmV3RW50cnkpOwotCi0gICAgLy8gSXQgaXMgcG9zc2libGUgdGhlIGN1cnNvciBmYWls
ZWQgdG8gY3JlYXRlIGFuZCB3ZSBqdXN0IHN0b3JlZCBhIG51bGwgdmFsdWUuCi0gICAgaWYgKCFh
ZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlKSB7Ci0gICAgICAgIG1fY3Vyc29ycy5yZW1vdmUoYWRk
UmVzdWx0Lml0ZXJhdG9yKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Ci19Ci0KLXZvaWQgU1FMaXRl
SURCVHJhbnNhY3Rpb246OmNsb3NlQ3Vyc29yKFNRTGl0ZUlEQkN1cnNvciYgY3Vyc29yKQotewot
ICAgIEFTU0VSVChtX2N1cnNvcnMuY29udGFpbnMoY3Vyc29yLmlkZW50aWZpZXIoKSkpOwotCi0g
ICAgbV9iYWNraW5nU3RvcmUudW5yZWdpc3RlckN1cnNvcigmY3Vyc29yKTsKLSAgICBtX2N1cnNv
cnMucmVtb3ZlKGN1cnNvci5pZGVudGlmaWVyKCkpOwotfQotCi12b2lkIFNRTGl0ZUlEQlRyYW5z
YWN0aW9uOjpub3RpZnlDdXJzb3JzT2ZDaGFuZ2VzKGludDY0X3Qgb2JqZWN0U3RvcmVJRCkKLXsK
LSAgICBmb3IgKGF1dG8mIGkgOiBtX2N1cnNvcnMpIHsKLSAgICAgICAgaWYgKGkudmFsdWUtPm9i
amVjdFN0b3JlSUQoKSA9PSBvYmplY3RTdG9yZUlEKQotICAgICAgICAgICAgaS52YWx1ZS0+b2Jq
ZWN0U3RvcmVSZWNvcmRzQ2hhbmdlZCgpOwotICAgIH0KLX0KLQotdm9pZCBTUUxpdGVJREJUcmFu
c2FjdGlvbjo6Y2xlYXJDdXJzb3JzKCkKLXsKLSAgICBmb3IgKGF1dG8mIGN1cnNvciA6IG1fY3Vy
c29ycy52YWx1ZXMoKSkKLSAgICAgICAgbV9iYWNraW5nU3RvcmUudW5yZWdpc3RlckN1cnNvcihj
dXJzb3IuZ2V0KCkpOwotCi0gICAgbV9jdXJzb3JzLmNsZWFyKCk7Ci19Ci0KLWJvb2wgU1FMaXRl
SURCVHJhbnNhY3Rpb246OmluUHJvZ3Jlc3MoKSBjb25zdAotewotICAgIHJldHVybiBtX3NxbGl0
ZVRyYW5zYWN0aW9uICYmIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9TUUxpdGVJREJUcmFuc2FjdGlvbi5o
IGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxpdGUvU1FMaXRl
SURCVHJhbnNhY3Rpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM5MjNhMC4u
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL3Nx
bGl0ZS9TUUxpdGVJREJUcmFuc2FjdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgU1FMaXRlSURCVHJhbnNhY3Rpb25faAotI2RlZmluZSBT
UUxpdGVJREJUcmFuc2FjdGlvbl9oCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYg
RU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCi0KLSNpbmNsdWRlICJJREJJZGVudGlmaWVyLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9JREJEYXRhYmFzZUJhY2tlbmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIFNRTGl0ZURhdGFiYXNlOwotY2xhc3MgU1FMaXRlVHJhbnNhY3Rpb247Ci0K
LW5hbWVzcGFjZSBJbmRleGVkREIgewotZW51bSBjbGFzcyBDdXJzb3JEaXJlY3Rpb247Ci1lbnVt
IGNsYXNzIEN1cnNvclR5cGU7Ci1lbnVtIGNsYXNzIFRyYW5zYWN0aW9uTW9kZTsKLX0KLQotc3Ry
dWN0IElEQktleVJhbmdlRGF0YTsKLQotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3Mg
U1FMaXRlSURCQ3Vyc29yOwotY2xhc3MgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxp
dGU7Ci0KLWNsYXNzIFNRTGl0ZUlEQlRyYW5zYWN0aW9uIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTUUxpdGVJREJUcmFuc2FjdGlvbik7Ci1wdWJsaWM6Ci0gICAgU1FMaXRlSURCVHJhbnNh
Y3Rpb24oVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUmLCBjb25zdCBJREJJZGVu
dGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIFdlYkNvcmU6OkluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25Nb2RlKTsKLSAgICB+U1FMaXRlSURCVHJhbnNhY3Rpb24oKTsKLQotICAgIGNvbnN0IElE
QklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRl
bnRpZmllcjsgfQotCi0gICAgYm9vbCBiZWdpbihXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZSYpOwot
ICAgIGJvb2wgY29tbWl0KCk7Ci0gICAgYm9vbCByZXNldCgpOwotICAgIGJvb2wgcm9sbGJhY2so
KTsKLQotICAgIFNRTGl0ZUlEQkN1cnNvciogb3BlbkN1cnNvcihpbnQ2NF90IG9iamVjdFN0b3Jl
SUQsIGludDY0X3QgaW5kZXhJRCwgV2ViQ29yZTo6SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24s
IFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vyc29yVHlwZSwgV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kOjpUYXNrVHlwZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UmFuZ2VEYXRhJik7Ci0KLSAgICB2
b2lkIGNsb3NlQ3Vyc29yKFNRTGl0ZUlEQkN1cnNvciYpOwotICAgIHZvaWQgbm90aWZ5Q3Vyc29y
c09mQ2hhbmdlcyhpbnQ2NF90IG9iamVjdFN0b3JlSUQpOwotCi0gICAgV2ViQ29yZTo6SW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQotICAg
IGJvb2wgaW5Qcm9ncmVzcygpIGNvbnN0OwotCi0gICAgV2ViQ29yZTo6U1FMaXRlVHJhbnNhY3Rp
b24qIHNxbGl0ZVRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zcWxpdGVUcmFuc2FjdGlv
bi5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgY2xlYXJDdXJzb3JzKCk7Ci0KLSAgICBJ
REJJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKLSAgICBXZWJDb3JlOjpJbmRleGVkREI6OlRyYW5z
YWN0aW9uTW9kZSBtX21vZGU7Ci0KLSAgICBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNR
TGl0ZSYgbV9iYWNraW5nU3RvcmU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0
ZVRyYW5zYWN0aW9uPiBtX3NxbGl0ZVRyYW5zYWN0aW9uOwotICAgIEhhc2hNYXA8SURCSWRlbnRp
Zmllciwgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZUlEQkN1cnNvcj4+IG1fY3Vyc29yczsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQotI2VuZGlmIC8vIFNRTGl0ZUlEQlRyYW5z
YWN0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRl
eGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvc3FsaXRlL1VuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTA2YzE1Mi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUu
aCIKLQotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJP
Q0VTUykKLQotI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgotI2luY2x1ZGUgIklEQlNlcmlh
bGl6YXRpb24uaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiU1FMaXRlSURCQ3Vy
c29yLmgiCi0jaW5jbHVkZSAiU1FMaXRlSURCVHJhbnNhY3Rpb24uaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL0ZpbGVTeXN0ZW0uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lEQkJpbmRpbmdVdGlsaXRpZXMu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lEQkRhdGFiYXNlTWV0YWRhdGEuaD4KLSNpbmNsdWRlIDxX
ZWJDb3JlL0lEQkdldFJlc3VsdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSURCS2V5RGF0YS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvSURCS2V5UmFuZ2UuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1NRTGl0
ZURhdGFiYXNlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TUUxpdGVTdGF0ZW1lbnQuaD4KLSNpbmNs
dWRlIDxXZWJDb3JlL1NRTGl0ZVRyYW5zYWN0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TaGFy
ZWRCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvUnVuTG9vcC5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi0vLyBDdXJyZW50IHZlcnNpb24gb2YgdGhl
IG1ldGFkYXRhIHNjaGVtYSBiZWluZyB1c2VkIGluIHRoZSBtZXRhZGF0YSBkYXRhYmFzZS4KLXN0
YXRpYyBjb25zdCBpbnQgY3VycmVudE1ldGFkYXRhVmVyc2lvbiA9IDE7Ci0KLXN0YXRpYyBjb25z
dCBTdHJpbmcgdjFSZWNvcmRzVGFibGVTY2hlbWEoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCi17
Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNSRUFURSBUQUJMRSAiLCB0YWJsZU5hbWUsICIgKG9i
amVjdFN0b3JlSUQgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBrZXkgVEVYVCBD
T0xMQVRFIElEQktFWSBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElD
VCBSRVBMQUNFLCB2YWx1ZSBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIpOwotfQotCi1zdGF0
aWMgY29uc3QgU3RyaW5nJiB2MVJlY29yZHNUYWJsZVNjaGVtYSgpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFdURjo6U3RyaW5nPiB2MVJlY29yZHNUYWJsZVNjaGVtYVN0cmluZyh2MVJl
Y29yZHNUYWJsZVNjaGVtYSgiUmVjb3JkcyIpKTsKLSAgICByZXR1cm4gdjFSZWNvcmRzVGFibGVT
Y2hlbWFTdHJpbmc7Ci19Ci0KLXN0YXRpYyBjb25zdCBTdHJpbmcmIHYxUmVjb3Jkc1RhYmxlU2No
ZW1hQWx0ZXJuYXRlKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V1RGOjpTdHJpbmc+
IHYxUmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nKHYxUmVjb3Jkc1RhYmxlU2NoZW1hKCJcIlJlY29y
ZHNcIiIpKTsKLSAgICByZXR1cm4gdjFSZWNvcmRzVGFibGVTY2hlbWFTdHJpbmc7Ci19Ci0KLXN0
YXRpYyBjb25zdCBTdHJpbmcgdjJSZWNvcmRzVGFibGVTY2hlbWEoY29uc3QgU3RyaW5nJiB0YWJs
ZU5hbWUpCi17Ci0gICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNSRUFURSBUQUJMRSAiLCB0YWJsZU5h
bWUsICIgKG9iamVjdFN0b3JlSUQgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBr
ZXkgVEVYVCBDT0xMQVRFIElEQktFWSBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCB2YWx1ZSBO
T1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIpOwotfQotCi1zdGF0aWMgY29uc3QgU3RyaW5nJiB2
MlJlY29yZHNUYWJsZVNjaGVtYSgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdURjo6
U3RyaW5nPiB2MlJlY29yZHNUYWJsZVNjaGVtYVN0cmluZyh2MlJlY29yZHNUYWJsZVNjaGVtYSgi
UmVjb3JkcyIpKTsKLSAgICByZXR1cm4gdjJSZWNvcmRzVGFibGVTY2hlbWFTdHJpbmc7Ci19Ci0K
LXN0YXRpYyBjb25zdCBTdHJpbmcmIHYyUmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkKLXsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V1RGOjpTdHJpbmc+IHYyUmVjb3Jkc1RhYmxlU2No
ZW1hU3RyaW5nKHYyUmVjb3Jkc1RhYmxlU2NoZW1hKCJcIlJlY29yZHNcIiIpKTsKLSAgICByZXR1
cm4gdjJSZWNvcmRzVGFibGVTY2hlbWFTdHJpbmc7Ci19Ci0KLXN0YXRpYyBpbnQ2NF90IGdlbmVy
YXRlRGF0YWJhc2VJZCgpCi17Ci0gICAgc3RhdGljIGludDY0X3QgZGF0YWJhc2VJRCA9IDA7Ci0K
LSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICByZXR1cm4gKytkYXRhYmFzZUlE
OwotfQotCi1VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6VW5pcXVlSURCRGF0
YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUoY29uc3QgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVu
dGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5KQotICAg
IDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCi0gICAgLCBtX2Fic29sdXRlRGF0YWJhc2VEaXJl
Y3RvcnkoZGF0YWJhc2VEaXJlY3RvcnkpCi17Ci0gICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgaXMg
bWVhbnQgdG8gYmUgY3JlYXRlZCBhbmQgdXNlZCBlbnRpcmVseSBvbiBhIGJhY2tncm91bmQgdGhy
ZWFkLgotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotfQotCi1VbmlxdWVJREJEYXRh
YmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6flVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FM
aXRlKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIG1fdHJhbnNh
Y3Rpb25zLmNsZWFyKCk7Ci0gICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7Ci0KLSAgICBpZiAobV92
bSkgewotICAgICAgICBKU0xvY2tIb2xkZXIgbG9ja2VyKG1fdm0uZ2V0KCkpOwotICAgICAgICBt
X2dsb2JhbE9iamVjdC5jbGVhcigpOwotICAgICAgICBtX3ZtID0gbnVsbHB0cjsKLSAgICB9Ci19
Ci0KLXN0YXRpYyBib29sIGNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlmTmVjZXNzYXJ5KFNR
TGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKLXsKLSAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKLSAg
ICB7Ci0gICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIHJlY29yZHMg
dGFibGUuCi0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoZGF0YWJhc2UsICJTRUxF
Q1QgdHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nUmVjb3Jkcyci
KTsKLSAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Ci0gICAg
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBz
Y2hlbWEgZm9yIHRoZSBSZWNvcmRzIHRhYmxlLiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVw
KCk7Ci0KLSAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gUmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNy
ZWF0ZSBpdCBhbmQgdGhlbiBiYWlsLgotICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ID09IFNRTElU
RV9ET05FKSB7Ci0gICAgICAgICAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKHYyUmVj
b3Jkc1RhYmxlU2NoZW1hKCkpKSB7Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY3JlYXRlIFJlY29yZHMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgZGF0YWJhc2Uu
bGFzdEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7Ci0g
ICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2gg
c2NoZW1hIGZvciB0aGUgUmVjb3JkcyB0YWJsZS4iKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29s
dW1uVGV4dCgxKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoIWN1cnJlbnRTY2hlbWEuaXNFbXB0eSgp
KTsKLQotICAgIC8vIElmIHRoZSBzY2hlbWEgaW4gdGhlIGJhY2tpbmcgc3RvcmUgaXMgdGhlIGN1
cnJlbnQgc2NoZW1hLCB3ZSdyZSBkb25lLgotICAgIGlmIChjdXJyZW50U2NoZW1hID09IHYyUmVj
b3Jkc1RhYmxlU2NoZW1hKCkgfHwgY3VycmVudFNjaGVtYSA9PSB2MlJlY29yZHNUYWJsZVNjaGVt
YUFsdGVybmF0ZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIC8vIElmIHRoZSByZWNv
cmQgdGFibGUgaXMgbm90IHRoZSBjdXJyZW50IHNjaGVtYSB0aGVuIGl0IG11c3QgYmUgb25lIG9m
IHRoZSBwcmV2aW91cyBzY2hlbWFzLgotICAgIC8vIElmIGl0IGlzIG5vdCB0aGVuIHRoZSBkYXRh
YmFzZSBpcyBpbiBhbiB1bnJlY292ZXJhYmxlIHN0YXRlIGFuZCB0aGlzIHNob3VsZCBiZSBjb25z
aWRlcmVkIGEgZmF0YWwgZXJyb3IuCi0gICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gdjFSZWNvcmRz
VGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1hICE9IHYxUmVjb3Jkc1RhYmxlU2NoZW1hQWx0
ZXJuYXRlKCkpCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBT
UUxpdGVUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihkYXRhYmFzZSk7Ci0gICAgdHJhbnNhY3Rpb24u
YmVnaW4oKTsKLQotICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSB0YWJsZSB3aXRoIHRoZSBjb3Jy
ZWN0IHNjaGVtYSBhbmQgbWlncmF0ZSBhbGwgZXhpc3RpbmcgY29udGVudCBvdmVyLgotICAgIGlm
ICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQodjJSZWNvcmRzVGFibGVTY2hlbWEoIl9UZW1wX1Jl
Y29yZHMiKSkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIHRlbXBvcmFy
eSByZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIGRhdGFiYXNlLmxhc3RFcnJv
cigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJJTlNFUlQgSU5UTyBfVGVt
cF9SZWNvcmRzIFNFTEVDVCAqIEZST00gUmVjb3JkcyIpKSB7Ci0gICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IG1pZ3JhdGUgZXhpc3RpbmcgUmVjb3JkcyBjb250ZW50ICglaSkgLSAlcyIsIGRh
dGFiYXNlLmxhc3RFcnJvcigpLCBkYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWRhdGFiYXNlLmV4ZWN1dGVDb21tYW5kKCJE
Uk9QIFRBQkxFIFJlY29yZHMiKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBkcm9w
IGV4aXN0aW5nIFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFzdEVycm9yKCks
IGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGlmICghZGF0YWJhc2UuZXhlY3V0ZUNvbW1hbmQoIkFMVEVSIFRBQkxFIF9UZW1wX1Jl
Y29yZHMgUkVOQU1FIFRPIFJlY29yZHMiKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCByZW5hbWUgdGVtcG9yYXJ5IFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgZGF0YWJhc2UubGFz
dEVycm9yKCksIGRhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmVuc3VyZVZh
bGlkUmVjb3Jkc1RhYmxlKCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAg
ICBBU1NFUlQobV9zcWxpdGVEQik7Ci0gICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsK
LQotICAgIGlmICghY3JlYXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxlSWZOZWNlc3NhcnkoKm1fc3Fs
aXRlREIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXaGV0aGVyIHRoZSB1cGRh
dGVkIHJlY29yZHMgdGFibGUgYWxyZWFkeSBleGlzdGVkIG9yIGlmIGl0IHdhcyBqdXN0IGNyZWF0
ZWQgYW5kIHRoZSBkYXRhIG1pZ3JhdGVkIG92ZXIsCi0gICAgLy8gbWFrZSBzdXJlIHRoZSB1bmlx
dWVuZXNzIGluZGV4IGV4aXN0cy4KLSAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5k
KCJDUkVBVEUgVU5JUVVFIElOREVYIElGIE5PVCBFWElTVFMgUmVjb3Jkc0luZGV4IE9OIFJlY29y
ZHMgKG9iamVjdFN0b3JlSUQsIGtleSk7IikpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY3JlYXRlIFJlY29yZHNJbmRleCBvbiBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlICglaSkg
LSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2co
KSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlTWV0YWRhdGE+IFVuaXF1ZUlEQkRhdGFiYXNl
QmFja2luZ1N0b3JlU1FMaXRlOjpjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxNZXRhZGF0YSgpCi17
Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKG1fc3FsaXRlREIp
OwotICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7Ci0KLSAgICBpZiAoIW1fc3FsaXRl
REItPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgSURCRGF0YWJhc2VJbmZvIChrZXkgVEVY
VCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBSRVBMQUNFLCB2
YWx1ZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpOyIpKSB7Ci0gICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IGNyZWF0ZSBJREJEYXRhYmFzZUluZm8gdGFibGUgaW4gZGF0YWJhc2Ug
KCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLQotICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoIkNS
RUFURSBUQUJMRSBPYmplY3RTdG9yZUluZm8gKGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgTk9UIE5V
TEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgbmFtZSBURVhUIE5P
VCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGtleVBhdGgg
QkxPQiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBhdXRvSW5jIElOVEVHRVIgTk9UIE5VTEwg
T04gQ09ORkxJQ1QgRkFJTCwgbWF4SW5kZXhJRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNU
IEZBSUwpOyIpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBPYmplY3RT
dG9yZUluZm8gdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgbV9zcWxpdGVEQiA9
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmICghbV9z
cWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoIkNSRUFURSBUQUJMRSBJbmRleEluZm8gKGlkIElOVEVH
RVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgbmFtZSBURVhUIE5PVCBOVUxMIE9OIENPTkZM
SUNUIEZBSUwsIG9iamVjdFN0b3JlSUQgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlM
LCBrZXlQYXRoIEJMT0IgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgaXNVbmlxdWUgSU5URUdF
UiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBtdWx0aUVudHJ5IElOVEVHRVIgTk9UIE5VTEwg
T04gQ09ORkxJQ1QgRkFJTCk7IikpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3Jl
YXRlIEluZGV4SW5mbyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBtX3NxbGl0
ZURCID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYg
KCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZCgiQ1JFQVRFIFRBQkxFIEluZGV4UmVjb3JkcyAo
aW5kZXhJRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIG9iamVjdFN0b3JlSUQg
SU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBrZXkgVEVYVCBDT0xMQVRFIElEQktF
WSBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCB2YWx1ZSBOT1QgTlVMTCBPTiBDT05GTElDVCBG
QUlMKTsiKSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgSW5kZXhSZWNv
cmRzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigp
LCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIG1fc3FsaXRlREIgPSBudWxs
cHRyOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fc3FsaXRl
REItPmV4ZWN1dGVDb21tYW5kKCJDUkVBVEUgVEFCTEUgS2V5R2VuZXJhdG9ycyAob2JqZWN0U3Rv
cmVJRCBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNU
IFJFUExBQ0UsIGN1cnJlbnRLZXkgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKTsi
KSkgewotICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgS2V5R2VuZXJhdG9ycyB0
YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBtX3NxbGl0ZURCID0gbnVsbHB0cjsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgewotICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBJTlRPIElEQkRh
dGFiYXNlSW5mbyBWQUxVRVMgKCdNZXRhZGF0YVZlcnNpb24nLCA/KTsiKSk7Ci0gICAgICAgIGlm
IChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQo
MSwgY3VycmVudE1ldGFkYXRhVmVyc2lvbikgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBz
cWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxk
IG5vdCBpbnNlcnQgZGF0YWJhc2UgbWV0YWRhdGEgdmVyc2lvbiBpbnRvIElEQkRhdGFiYXNlSW5m
byB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7Ci0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgIH0KLSAgICB7Ci0gICAgICAg
IFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIElO
VE8gSURCRGF0YWJhc2VJbmZvIFZBTFVFUyAoJ0RhdGFiYXNlTmFtZScsID8pOyIpKTsKLSAgICAg
ICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmlu
ZFRleHQoMSwgbV9pZGVudGlmaWVyLmRhdGFiYXNlTmFtZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IGluc2VydCBkYXRhYmFzZSBuYW1lIGludG8gSURCRGF0YWJhc2VJbmZv
IHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBtX3NxbGl0ZURCID0gbnVsbHB0cjsKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQotICAgIHsKLSAgICAgICAg
Ly8gRGF0YWJhc2UgdmVyc2lvbnMgYXJlIGRlZmluZWQgdG8gYmUgYSB1aW42NF90IGluIHRoZSBz
cGVjIGJ1dCBzcWxpdGUzIGRvZXNuJ3Qgc3VwcG9ydCBuYXRpdmUgYmluZGluZyBvZiB1bnNpZ25l
ZCBpbnRlZ2Vycy4KLSAgICAgICAgLy8gVGhlcmVmb3JlIHdlJ2xsIHN0b3JlIHRoZSB2ZXJzaW9u
IGFzIGEgU3RyaW5nLgotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBB
U0NJSUxpdGVyYWwoIklOU0VSVCBJTlRPIElEQkRhdGFiYXNlSW5mbyBWQUxVRVMgKCdEYXRhYmFz
ZVZlcnNpb24nLCA/KTsiKSk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9P
SwotICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0cmluZzo6bnVtYmVyKElEQkRhdGFi
YXNlTWV0YWRhdGE6Ok5vSW50VmVyc2lvbikpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwg
c3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3Vs
ZCBub3QgaW5zZXJ0IGRlZmF1bHQgdmVyc2lvbiBpbnRvIElEQkRhdGFiYXNlSW5mbyB0YWJsZSAo
JWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9y
TXNnKCkpOwotICAgICAgICAgICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7Ci0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbV9zcWxpdGVEQi0+
ZXhlY3V0ZUNvbW1hbmQoQVNDSUlMaXRlcmFsKCJJTlNFUlQgSU5UTyBJREJEYXRhYmFzZUluZm8g
VkFMVUVTICgnTWF4T2JqZWN0U3RvcmVJRCcsIDEpOyIpKSkgewotICAgICAgICBMT0dfRVJST1Io
IkNvdWxkIG5vdCBpbnNlcnQgZGVmYXVsdCB2ZXJzaW9uIGludG8gSURCRGF0YWJhc2VJbmZvIHRh
YmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgIG1fc3FsaXRlREIgPSBudWxscHRyOwotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGluaXRpYWwgbWV0YWRhdGEgbWF0Y2hl
cyB0aGUgZGVmYXVsdCB2YWx1ZXMgd2UganVzdCBwdXQgaW50byB0aGUgbWV0YWRhdGEgZGF0YWJh
c2UuCi0gICAgYXV0byBtZXRhZGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VNZXRh
ZGF0YT4oKTsKLSAgICBtZXRhZGF0YS0+bmFtZSA9IG1faWRlbnRpZmllci5kYXRhYmFzZU5hbWUo
KTsKLSAgICBtZXRhZGF0YS0+dmVyc2lvbiA9IElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5vSW50VmVy
c2lvbjsKLSAgICBtZXRhZGF0YS0+bWF4T2JqZWN0U3RvcmVJZCA9IDE7Ci0KLSAgICByZXR1cm4g
bWV0YWRhdGE7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBVbmlx
dWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXh0cmFjdEV4aXN0aW5nTWV0YWRhdGEo
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX3NxbGl0
ZURCKTsKLQotICAgIGlmICghbV9zcWxpdGVEQi0+dGFibGVFeGlzdHMoQVNDSUlMaXRlcmFsKCJJ
REJEYXRhYmFzZUluZm8iKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBt
ZXRhZGF0YSA9IHN0ZDo6bWFrZV91bmlxdWU8SURCRGF0YWJhc2VNZXRhZGF0YT4oKTsKLSAgICB7
Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgi
U0VMRUNUIHZhbHVlIEZST00gSURCRGF0YWJhc2VJbmZvIFdIRVJFIGtleSA9ICdNZXRhZGF0YVZl
cnNpb24nOyIpKTsKLSAgICAgICAgaWYgKHNxbC5pc0NvbHVtbk51bGwoMCkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgbWV0YWRhdGEtPnZlcnNpb24gPSBzcWwuZ2V0Q29s
dW1uSW50KDApOwotICAgIH0KLSAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1f
c3FsaXRlREIsICJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRhYmFzZUluZm8gV0hFUkUga2V5ID0g
J0RhdGFiYXNlTmFtZSc7Iik7Ci0gICAgICAgIGlmIChzcWwuaXNDb2x1bW5OdWxsKDApKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1ldGFkYXRhLT5uYW1lID0gc3FsLmdl
dENvbHVtblRleHQoMCk7Ci0gICAgICAgIGlmIChtZXRhZGF0YS0+bmFtZSAhPSBtX2lkZW50aWZp
ZXIuZGF0YWJhc2VOYW1lKCkpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRGF0YWJhc2UgbmFt
ZSBpbiB0aGUgbWV0YWRhdGEgZGF0YWJhc2UgKCclcycpIGRvZXMgbm90IG1hdGNoIHRoZSBleHBl
Y3RlZCBuYW1lICgnJXMnKSIsIG1ldGFkYXRhLT5uYW1lLnV0ZjgoKS5kYXRhKCksIG1faWRlbnRp
Zmllci5kYXRhYmFzZU5hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICB9Ci0gICAgfQotICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50
IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJTRUxFQ1QgdmFsdWUgRlJPTSBJREJEYXRh
YmFzZUluZm8gV0hFUkUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7IikpOwotICAgICAgICBpZiAo
c3FsLmlzQ29sdW1uTnVsbCgwKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICBTdHJpbmcgc3RyaW5nVmVyc2lvbiA9IHNxbC5nZXRDb2x1bW5UZXh0KDApOwotICAgICAgICBi
b29sIG9rOwotICAgICAgICBtZXRhZGF0YS0+dmVyc2lvbiA9IHN0cmluZ1ZlcnNpb24udG9VSW50
NjRTdHJpY3QoJm9rKTsKLSAgICAgICAgaWYgKCFvaykgewotICAgICAgICAgICAgTE9HX0VSUk9S
KCJEYXRhYmFzZSB2ZXJzaW9uIG9uIGRpc2sgKCclcycpIGRvZXMgbm90IGNsZWFubHkgY29udmVy
dCB0byBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciB2ZXJzaW9uIiwgc3RyaW5nVmVyc2lvbi51
dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBB
U0NJSUxpdGVyYWwoIlNFTEVDVCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luYywgbWF4SW5kZXhJ
RCBGUk9NIE9iamVjdFN0b3JlSW5mbzsiKSk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9
IFNRTElURV9PSykKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGludCBy
ZXN1bHQgPSBzcWwuc3RlcCgpOwotICAgICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cp
IHsKLSAgICAgICAgICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgb3NNZXRhZGF0YTsKLSAgICAg
ICAgICAgIG9zTWV0YWRhdGEuaWQgPSBzcWwuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgICAgICAg
ICBvc01ldGFkYXRhLm5hbWUgPSBzcWwuZ2V0Q29sdW1uVGV4dCgxKTsKLQotICAgICAgICAgICAg
VmVjdG9yPGNoYXI+IGtleVBhdGhCdWZmZXI7Ci0gICAgICAgICAgICBzcWwuZ2V0Q29sdW1uQmxv
YkFzVmVjdG9yKDIsIGtleVBhdGhCdWZmZXIpOwotCi0gICAgICAgICAgICBpZiAoIWRlc2VyaWFs
aXplSURCS2V5UGF0aChyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihrZXlQYXRoQnVm
ZmVyLmRhdGEoKSksIGtleVBhdGhCdWZmZXIuc2l6ZSgpLCBvc01ldGFkYXRhLmtleVBhdGgpKSB7
Ci0gICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXh0cmFjdCBrZXkgcGF0aCBt
ZXRhZGF0YSBmcm9tIGRhdGFiYXNlIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG9zTWV0YWRhdGEuYXV0b0luY3JlbWVudCA9
IHNxbC5nZXRDb2x1bW5JbnQoMyk7Ci0gICAgICAgICAgICBvc01ldGFkYXRhLm1heEluZGV4SWQg
PSBzcWwuZ2V0Q29sdW1uSW50NjQoNCk7Ci0KLSAgICAgICAgICAgIG1ldGFkYXRhLT5vYmplY3RT
dG9yZXMuc2V0KG9zTWV0YWRhdGEuaWQsIG9zTWV0YWRhdGEpOwotICAgICAgICAgICAgcmVzdWx0
ID0gc3FsLnN0ZXAoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChyZXN1bHQgIT0gU1FMSVRF
X0RPTkUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZmV0Y2hpbmcgb2JqZWN0IHN0
b3JlIG1ldGFkYXRhIGZyb20gZGF0YWJhc2Ugb24gZGlzayIpOwotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIGlkLCBuYW1lLCBvYmpl
Y3RTdG9yZUlELCBrZXlQYXRoLCBpc1VuaXF1ZSwgbXVsdGlFbnRyeSBGUk9NIEluZGV4SW5mbzsi
KSk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSykKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOwotICAg
ICAgICB3aGlsZSAocmVzdWx0ID09IFNRTElURV9ST1cpIHsKLSAgICAgICAgICAgIElEQkluZGV4
TWV0YWRhdGEgaW5kZXhNZXRhZGF0YTsKLQotICAgICAgICAgICAgaW5kZXhNZXRhZGF0YS5pZCA9
IHNxbC5nZXRDb2x1bW5JbnQ2NCgwKTsKLSAgICAgICAgICAgIGluZGV4TWV0YWRhdGEubmFtZSA9
IHNxbC5nZXRDb2x1bW5UZXh0KDEpOwotICAgICAgICAgICAgaW50NjRfdCBvYmplY3RTdG9yZUlE
ID0gc3FsLmdldENvbHVtbkludDY0KDIpOwotCi0gICAgICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5
UGF0aEJ1ZmZlcjsKLSAgICAgICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNWZWN0b3IoMywga2V5
UGF0aEJ1ZmZlcik7Ci0KLSAgICAgICAgICAgIGlmICghZGVzZXJpYWxpemVJREJLZXlQYXRoKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGtleVBhdGhCdWZmZXIuZGF0YSgpKSwga2V5
UGF0aEJ1ZmZlci5zaXplKCksIGluZGV4TWV0YWRhdGEua2V5UGF0aCkpIHsKLSAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleHRyYWN0IGtleSBwYXRoIG1ldGFkYXRhIGZyb20g
ZGF0YWJhc2UiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgaW5kZXhNZXRhZGF0YS51bmlxdWUgPSBzcWwuZ2V0Q29sdW1uSW50
KDQpOwotICAgICAgICAgICAgaW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5ID0gc3FsLmdldENvbHVt
bkludCg1KTsKLQotICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZU1ldGFkYXRhSXQgPSBtZXRh
ZGF0YS0+b2JqZWN0U3RvcmVzLmZpbmQob2JqZWN0U3RvcmVJRCk7Ci0gICAgICAgICAgICBpZiAo
b2JqZWN0U3RvcmVNZXRhZGF0YUl0ID09IG1ldGFkYXRhLT5vYmplY3RTdG9yZXMuZW5kKCkpIHsK
LSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZvdW5kIGluZGV4IHJlZmVycmluZyB0byBhIG5v
bi1leGlzdGFudCBvYmplY3Qgc3RvcmUiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb2JqZWN0U3RvcmVNZXRhZGF0YUl0LT52
YWx1ZS5pbmRleGVzLnNldChpbmRleE1ldGFkYXRhLmlkLCBpbmRleE1ldGFkYXRhKTsKLQotICAg
ICAgICAgICAgcmVzdWx0ID0gc3FsLnN0ZXAoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChy
ZXN1bHQgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZmV0
Y2hpbmcgaW5kZXggbWV0YWRhdGEgZnJvbSBkYXRhYmFzZSBvbiBkaXNrIik7Ci0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtZXRhZGF0
YTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZURhdGFiYXNlPiBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZTo6b3BlblNRTGl0ZURhdGFiYXNlQXRQYXRoKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIGF1dG8g
c3FsaXRlRGF0YWJhc2UgPSBzdGQ6Om1ha2VfdW5pcXVlPFNRTGl0ZURhdGFiYXNlPigpOwotICAg
IGlmICghc3FsaXRlRGF0YWJhc2UtPm9wZW4ocGF0aCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJG
YWlsZWQgdG8gb3BlbiBTUUxpdGUgZGF0YWJhc2UgYXQgcGF0aCAnJXMnIiwgcGF0aC51dGY4KCku
ZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgLy8gU2luY2Ug
YSBXb3JrUXVldWUgaXNuJ3QgYm91bmQgdG8gYSBzcGVjaWZpYyB0aHJlYWQsIHdlIGhhdmUgdG8g
ZGlzYWJsZSB0aHJlYWRpbmcgY2hlY2tzCi0gICAgLy8gZXZlbiB0aG91Z2ggd2UgbmV2ZXIgYWNj
ZXNzIHRoZSBkYXRhYmFzZSBmcm9tIGRpZmZlcmVudCB0aHJlYWRzIHNpbXVsdGFuZW91c2x5Lgot
ICAgIHNxbGl0ZURhdGFiYXNlLT5kaXNhYmxlVGhyZWFkaW5nQ2hlY2tzKCk7Ci0KLSAgICByZXR1
cm4gc3FsaXRlRGF0YWJhc2U7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFk
YXRhPiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Z2V0T3JFc3RhYmxpc2hN
ZXRhZGF0YSgpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBTdHJp
bmcgZGJGaWxlbmFtZSA9IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlOjpjYWxjdWxhdGVBYnNvbHV0
ZURhdGFiYXNlRmlsZW5hbWUobV9hYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5KTsKLQotICAgIG1f
c3FsaXRlREIgPSBvcGVuU1FMaXRlRGF0YWJhc2VBdFBhdGgoZGJGaWxlbmFtZSk7Ci0gICAgaWYg
KCFtX3NxbGl0ZURCKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIG1fc3FsaXRlREIt
PnNldENvbGxhdGlvbkZ1bmN0aW9uKCJJREJLRVkiLCBbdGhpc10oaW50IGFMZW5ndGgsIGNvbnN0
IHZvaWQqIGEsIGludCBiTGVuZ3RoLCBjb25zdCB2b2lkKiBiKSB7Ci0gICAgICAgIHJldHVybiBp
ZGJLZXlDb2xsYXRlKGFMZW5ndGgsIGEsIGJMZW5ndGgsIGIpOwotICAgIH0pOwotCi0gICAgaWYg
KCFlbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRXJyb3Ig
Y3JlYXRpbmcgb3IgbWlncmF0aW5nIFJlY29yZHMgdGFibGUgaW4gZGF0YWJhc2UiKTsKLSAgICAg
ICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZU1ldGFkYXRhPiBtZXRhZGF0YSA9IGV4
dHJhY3RFeGlzdGluZ01ldGFkYXRhKCk7Ci0gICAgaWYgKCFtZXRhZGF0YSkKLSAgICAgICAgbWV0
YWRhdGEgPSBjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxNZXRhZGF0YSgpOwotCi0gICAgaWYgKCFt
ZXRhZGF0YSkKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXN0YWJsaXNoIElEQiBkYXRh
YmFzZSBhdCBwYXRoICclcyciLCBkYkZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgLy8g
VGhlIGRhdGFiYXNlIGlkIGlzIGEgcnVudGltZSBjb25jZXB0IGFuZCBkb2Vzbid0IG5lZWQgdG8g
YmUgc3RvcmVkIGluIHRoZSBtZXRhZGF0YSBkYXRhYmFzZS4KLSAgICBtZXRhZGF0YS0+aWQgPSBn
ZW5lcmF0ZURhdGFiYXNlSWQoKTsKLQotICAgIHJldHVybiBtZXRhZGF0YTsKLX0KLQotYm9vbCBV
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6ZXN0YWJsaXNoVHJhbnNhY3Rpb24o
Y29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSBtb2RlKQotewotICAgIEFTU0VS
VCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9ucy5hZGQodHJh
bnNhY3Rpb25JZGVudGlmaWVyLCBzdGQ6Om1ha2VfdW5pcXVlPFNRTGl0ZUlEQlRyYW5zYWN0aW9u
PigqdGhpcywgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBtb2RlKSkuaXNOZXdFbnRyeSkgewotICAg
ICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gZXN0YWJsaXNoIHRyYW5zYWN0aW9uIGlkZW50aWZp
ZXIgdGhhdCBhbHJlYWR5IGV4aXN0cyIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3Rv
cmVTUUxpdGU6OmJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotCi0gICAg
U1FMaXRlSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRy
YW5zYWN0aW9uSWRlbnRpZmllcik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikgewotICAgICAgICBM
T0dfRVJST1IoIkF0dGVtcHQgdG8gYmVnaW4gYSB0cmFuc2FjdGlvbiB0aGF0IGhhc24ndCBiZWVu
IGVzdGFibGlzaGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gdHJhbnNhY3Rpb24tPmJlZ2luKCptX3NxbGl0ZURCKTsKLX0KLQotYm9vbCBVbmlxdWVJREJE
YXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6Y29tbWl0VHJhbnNhY3Rpb24oY29uc3QgSURCSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotCi0gICAgU1FMaXRlSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uID0gbV90
cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Ci0gICAgaWYgKCF0cmFuc2Fj
dGlvbikgewotICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gY29tbWl0IGEgdHJhbnNhY3Rp
b24gdGhhdCBoYXNuJ3QgYmVlbiBlc3RhYmxpc2hlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRyYW5zYWN0aW9uLT5jb21taXQoKTsKLX0KLQotYm9vbCBV
bmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6cmVzZXRUcmFuc2FjdGlvbihjb25z
dCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpCi17Ci0gICAgQVNTRVJUKCFS
dW5Mb29wOjppc01haW4oKSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCVHJhbnNh
Y3Rpb24+IHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMudGFrZSh0cmFuc2FjdGlvbklkZW50
aWZpZXIpOwotICAgIGlmICghdHJhbnNhY3Rpb24pIHsKLSAgICAgICAgTE9HX0VSUk9SKCJBdHRl
bXB0IHRvIHJlc2V0IGEgdHJhbnNhY3Rpb24gdGhhdCBoYXNuJ3QgYmVlbiBlc3RhYmxpc2hlZCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRyYW5zYWN0aW9u
LT5yZXNldCgpOwotfQotCi1ib29sIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRl
Ojpyb2xsYmFja1RyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllcikKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLQotICAgIFNRTGl0
ZUlEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2Fj
dGlvbklkZW50aWZpZXIpOwotICAgIGlmICghdHJhbnNhY3Rpb24pIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJBdHRlbXB0IHRvIHJvbGxiYWNrIGEgdHJhbnNhY3Rpb24gdGhhdCBoYXNuJ3QgYmVlbiBl
c3RhYmxpc2hlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCF0
cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0
byByb2xsYmFjayBhIHRyYW5zYWN0aW9uIHRoYXQgaGFzbid0IGJlZ3VuIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7
Ci19Ci0KLWJvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OmNoYW5nZURh
dGFiYXNlVmVyc2lvbihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIs
IHVpbnQ2NF90IG5ld1ZlcnNpb24pCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7
Ci0gICAgQVNTRVJUKG1fc3FsaXRlREIpOwotICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4o
KSk7Ci0KLSAgICBTUUxpdGVJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0
aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uIHx8
ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQXR0ZW1w
dCB0byBjaGFuZ2UgZGF0YWJhc2UgdmVyc2lvbiB3aXRoIGFuIGVzdGFibGlzaGVkLCBpbi1wcm9n
cmVzcyB0cmFuc2FjdGlvbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlm
ICh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpWZXJz
aW9uQ2hhbmdlKSB7Ci0gICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBjaGFuZ2UgZGF0YWJh
c2UgdmVyc2lvbiBkdXJpbmcgYSBub24gdmVyc2lvbi1jaGFuZ2UgdHJhbnNhY3Rpb24iKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJVUERBVEUgSURCRGF0YWJhc2VJbmZv
IFNFVCB2YWx1ZSA9ID8gd2hlcmUga2V5ID0gJ0RhdGFiYXNlVmVyc2lvbic7IikpOwotICAgICAg
ICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5k
VGV4dCgxLCBTdHJpbmc6Om51bWJlcihuZXdWZXJzaW9uKSkgIT0gU1FMSVRFX09LCi0gICAgICAg
ICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCB1cGRhdGUgZGF0YWJhc2UgdmVyc2lvbiBpbiBJREJEYXRhYmFzZUluZm8g
dGFibGUgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxh
c3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlU1FMaXRlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFu
c2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmIG1ldGFkYXRh
KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX3NxbGl0
ZURCKTsKLSAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOwotCi0gICAgU1FMaXRlSURC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9u
SWRlbnRpZmllcik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rpb24tPmluUHJv
Z3Jlc3MoKSkgewotICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gY2hhbmdlIGRhdGFiYXNl
IHZlcnNpb24gd2l0aCBhbiBlc3RhYmxpc2hlZCwgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb24iKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUo
KSAhPSBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZTo6VmVyc2lvbkNoYW5nZSkgewotICAgICAg
ICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gY2hhbmdlIGRhdGFiYXNlIHZlcnNpb24gZHVyaW5nIGEg
bm9uIHZlcnNpb24tY2hhbmdlIHRyYW5zYWN0aW9uIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBrZXlQYXRoQmxvYiA9IHNlcmlhbGl6
ZUlEQktleVBhdGgobWV0YWRhdGEua2V5UGF0aCk7Ci0gICAgaWYgKCFrZXlQYXRoQmxvYikgewot
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXJpYWxpemUgSURCS2V5UGF0aCB0byBzYXZl
IGluIGRhdGFiYXNlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICB7Ci0g
ICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiSU5T
RVJUIElOVE8gT2JqZWN0U3RvcmVJbmZvIFZBTFVFUyAoPywgPywgPywgPywgPyk7IikpOwotICAg
ICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5i
aW5kSW50NjQoMSwgbWV0YWRhdGEuaWQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3Fs
LmJpbmRUZXh0KDIsIG1ldGFkYXRhLm5hbWUpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwg
c3FsLmJpbmRCbG9iKDMsIGtleVBhdGhCbG9iLT5kYXRhKCksIGtleVBhdGhCbG9iLT5zaXplKCkp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQoNCwgbWV0YWRhdGEuYXV0
b0luY3JlbWVudCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDUs
IG1ldGFkYXRhLm1heEluZGV4SWQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
YWRkIG9iamVjdCBzdG9yZSAnJXMnIHRvIE9iamVjdFN0b3JlSW5mbyB0YWJsZSAoJWkpIC0gJXMi
LCBtZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBt
X3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1f
c3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIElOVE8gS2V5R2VuZXJhdG9ycyBWQUxVRVMg
KD8sIDApOyIpKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIG1ldGFkYXRhLmlkKSAhPSBTUUxJVEVfT0sKLSAg
ICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IHNlZWQgaW5pdGlhbCBrZXkgZ2VuZXJhdG9yIHZhbHVlIGZvciBP
YmplY3RTdG9yZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCks
IG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFVuaXF1ZUlE
QkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBJREJJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCkK
LXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQobV9zcWxpdGVE
Qik7Ci0gICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKLQotICAgIFNRTGl0ZUlEQlRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklk
ZW50aWZpZXIpOwotICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dy
ZXNzKCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGNoYW5nZSBkYXRhYmFzZSB2
ZXJzaW9uIHdpdGggYW4gZXN0YWJsaXNoZWQsIGluLXByb2dyZXNzIHRyYW5zYWN0aW9uIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkg
IT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJBdHRlbXB0IHRvIGNoYW5nZSBkYXRhYmFzZSB2ZXJzaW9uIGR1cmluZyBhIG5v
biB2ZXJzaW9uLWNoYW5nZSB0cmFuc2FjdGlvbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgLy8gRGVsZXRlIHRoZSBPYmplY3RTdG9yZSByZWNvcmQKLSAgICB7Ci0gICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiREVMRVRF
IEZST00gT2JqZWN0U3RvcmVJbmZvIFdIRVJFIGlkID0gPzsiKSk7Ci0gICAgICAgIGlmIChzcWwu
cHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCBv
YmplY3RTdG9yZUlEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRlbGV0ZSBv
YmplY3Qgc3RvcmUgaWQgJSIgUFJJaTY0ICIgZnJvbSBPYmplY3RTdG9yZUluZm8gdGFibGUgKCVp
KSAtICVzIiwgb2JqZWN0U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRl
REItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIERlbGV0ZSB0aGUgT2JqZWN0U3RvcmUncyBrZXkgZ2VuZXJhdG9y
IHJlY29yZCBpZiB0aGVyZSBpcyBvbmUuCi0gICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
c3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIkRFTEVURSBGUk9NIEtleUdlbmVyYXRvcnMg
V0hFUkUgb2JqZWN0U3RvcmVJRCA9ID87IikpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAh
PSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJ
RCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05F
KSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBkZWxldGUgb2JqZWN0IHN0b3Jl
IGZyb20gS2V5R2VuZXJhdG9ycyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJy
b3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRGVsZXRlIGFsbCBhc3NvY2lhdGVkIHJl
Y29yZHMKLSAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFT
Q0lJTGl0ZXJhbCgiREVMRVRFIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPzsi
KSk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAg
fHwgc3FsLmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGRlbGV0ZSByZWNvcmRzIGZvciBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIg
KCVpKSAtICVzIiwgb2JqZWN0U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3Fs
aXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIC8vIERlbGV0ZSBhbGwgYXNzb2NpYXRlZCBJbmRleGVzCi0gICAg
ewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwo
IkRFTEVURSBGUk9NIEluZGV4SW5mbyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPzsiKSk7Ci0gICAg
ICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJp
bmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNx
bC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGRlbGV0ZSBpbmRleCBmcm9tIEluZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gRGVsZXRlIGFsbCBh
c3NvY2lhdGVkIEluZGV4IHJlY29yZHMKLSAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
cWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiREVMRVRFIEZST00gSW5kZXhSZWNvcmRzIFdI
RVJFIG9iamVjdFN0b3JlSUQgPSA/OyIpKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0g
U1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIG9iamVjdFN0b3JlSUQp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
ewotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZGVsZXRlIGluZGV4IHJlY29yZHMo
JWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9y
TXNnKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVT
UUxpdGU6OmNsZWFyT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29w
Ojppc01haW4oKSk7Ci0gICAgQVNTRVJUKG1fc3FsaXRlREIpOwotICAgIEFTU0VSVChtX3NxbGl0
ZURCLT5pc09wZW4oKSk7Ci0KLSAgICBTUUxpdGVJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24g
PSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLSAgICBpZiAoIXRy
YW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIExPR19F
UlJPUigiQXR0ZW1wdCB0byBjaGFuZ2UgZGF0YWJhc2UgdmVyc2lvbiB3aXRoIGFuIGVzdGFibGlz
aCwgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZTo6UmVhZE9ubHkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGNoYW5nZSBk
YXRhYmFzZSB2ZXJzaW9uIGR1cmluZyBhIHJlYWQtb25seSB0cmFuc2FjdGlvbiIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQg
c3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIkRFTEVURSBGUk9NIFJlY29yZHMgV0hFUkUg
b2JqZWN0U3RvcmVJRCA9ID87IikpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJRCkgIT0g
U1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0g
ICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBkZWxldGUgcmVjb3JkcyBmcm9tIG9iamVj
dCBzdG9yZSBpZCAlIiBQUklpNjQgIiAoJWkpIC0gJXMiLCBvYmplY3RTdG9yZUlELCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgewotICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIkRFTEVURSBGUk9NIElu
ZGV4UmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPzsiKSk7Ci0gICAgICAgIGlmIChzcWwu
cHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCBv
YmplY3RTdG9yZUlEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRlbGV0ZSBy
ZWNvcmRzIGZyb20gaW5kZXggcmVjb3JkIHN0b3JlIGlkICUiIFBSSWk2NCAiICglaSkgLSAlcyIs
IG9iamVjdFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZVNRTGl0ZTo6Y3JlYXRlSW5kZXgoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQkluZGV4TWV0YWRhdGEm
IG1ldGFkYXRhKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VS
VChtX3NxbGl0ZURCKTsKLSAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOwotCi0gICAg
U1FMaXRlSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRy
YW5zYWN0aW9uSWRlbnRpZmllcik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rp
b24tPmluUHJvZ3Jlc3MoKSkgewotICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gY3JlYXRl
IGluZGV4IHdpdGhvdXQgYW4gZXN0YWJsaXNoZWQsIGluLXByb2dyZXNzIHRyYW5zYWN0aW9uIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5tb2Rl
KCkgIT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGNyZWF0ZSBpbmRleCBkdXJpbmcgYSBub24tdmVyc2lv
bi1jaGFuZ2UgdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleVBhdGhCbG9iID0gc2VyaWFsaXplSURCS2V5UGF0
aChtZXRhZGF0YS5rZXlQYXRoKTsKLSAgICBpZiAoIWtleVBhdGhCbG9iKSB7Ci0gICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHNlcmlhbGl6ZSBJREJLZXlQYXRoIHRvIHNhdmUgaW4gZGF0YWJh
c2UiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIElOVE8gSW5kZXhJbmZvIFZB
TFVFUyAoPywgPywgPywgPywgPywgPyk7IikpOwotICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNR
TElURV9PSwotICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIG1ldGFkYXRhLmlkKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDIsIG1ldGFkYXRhLm5hbWUpICE9IFNRTElU
RV9PSwotICAgICAgICB8fCBzcWwuYmluZEludDY0KDMsIG9iamVjdFN0b3JlSUQpICE9IFNRTElU
RV9PSwotICAgICAgICB8fCBzcWwuYmluZEJsb2IoNCwga2V5UGF0aEJsb2ItPmRhdGEoKSwga2V5
UGF0aEJsb2ItPnNpemUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNxbC5iaW5kSW50KDUs
IG1ldGFkYXRhLnVuaXF1ZSkgIT0gU1FMSVRFX09LCi0gICAgICAgIHx8IHNxbC5iaW5kSW50KDYs
IG1ldGFkYXRhLm11bHRpRW50cnkpICE9IFNRTElURV9PSwotICAgICAgICB8fCBzcWwuc3RlcCgp
ICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGFkZCBpbmRl
eCAnJXMnIHRvIEluZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtZXRhZGF0YS5uYW1lLnV0Zjgo
KS5kYXRhKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXcml0ZSBpbmRl
eCByZWNvcmRzIGZvciBhbnkgcmVjb3JkcyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gdGhpcyBvYmpl
Y3Qgc3RvcmUuCi0gICAgU1FMaXRlSURCQ3Vyc29yKiBjdXJzb3IgPSB0cmFuc2FjdGlvbi0+b3Bl
bkN1cnNvcihvYmplY3RTdG9yZUlELCBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQsIEluZGV4
ZWREQjo6Q3Vyc29yRGlyZWN0aW9uOjpOZXh0LCBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleUFu
ZFZhbHVlLCBJREJEYXRhYmFzZUJhY2tlbmQ6Ok5vcm1hbFRhc2ssIElEQktleVJhbmdlRGF0YSgp
KTsKLQotICAgIGlmICghY3Vyc29yKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ2Fubm90IG9wZW4g
Y3Vyc29yIHRvIHBvcHVsYXRlIGluZGV4ZXMgaW4gZGF0YWJhc2UiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIG1fY3Vyc29ycy5zZXQoY3Vyc29yLT5pZGVudGlmaWVyKCks
IGN1cnNvcik7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SlNMb2NrSG9sZGVyPiBsb2NrZXI7Ci0g
ICAgd2hpbGUgKCFjdXJzb3ItPmN1cnJlbnRLZXkoKS5pc051bGwoKSkgewotICAgICAgICBjb25z
dCBJREJLZXlEYXRhJiBrZXkgPSBjdXJzb3ItPmN1cnJlbnRLZXkoKTsKLSAgICAgICAgY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZUJ1ZmZlciA9IGN1cnNvci0+Y3VycmVudFZhbHVlQnVmZmVy
KCk7Ci0KLSAgICAgICAgaWYgKCFtX2dsb2JhbE9iamVjdCkgewotICAgICAgICAgICAgQVNTRVJU
KCFtX3ZtKTsKLSAgICAgICAgICAgIG1fdm0gPSBWTTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBs
b2NrZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEpTTG9ja0hvbGRlcj4obV92bS5nZXQoKSk7Ci0gICAg
ICAgICAgICBtX2dsb2JhbE9iamVjdC5zZXQoKm1fdm0sIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGUo
Km1fdm0sIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKm1fdm0sIGpzTnVsbCgpKSkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFsb2NrZXIpCi0gICAgICAgICAgICBsb2NrZXIg
PSBzdGQ6Om1ha2VfdW5pcXVlPEpTTG9ja0hvbGRlcj4obV92bS5nZXQoKSk7Ci0KLSAgICAgICAg
RGVwcmVjYXRlZDo6U2NyaXB0VmFsdWUgdmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlQnVmZmVy
KG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIFZlY3Rvcjx1aW50OF90Pih2YWx1ZUJ1ZmZl
ciksIHRydWUpOwotICAgICAgICBWZWN0b3I8SURCS2V5RGF0YT4gaW5kZXhLZXlzOwotICAgICAg
ICBnZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCks
IG1ldGFkYXRhLCB2YWx1ZSwgaW5kZXhLZXlzKTsKLQotICAgICAgICBmb3IgKGF1dG8mIGluZGV4
S2V5IDogaW5kZXhLZXlzKSB7Ci0gICAgICAgICAgICBpZiAoIXVuY2hlY2tlZFB1dEluZGV4UmVj
b3JkKG9iamVjdFN0b3JlSUQsIG1ldGFkYXRhLmlkLCBrZXksIGluZGV4S2V5KSkgewotICAgICAg
ICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHB1dCBpbmRleCByZWNvcmQgZm9yIG5ld2x5
IGNyZWF0ZWQgaW5kZXgiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWN1cnNvci0+YWR2YW5jZSgxKSkgewot
ICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBhZHZhbmNpbmcgY3Vyc29yIHdoaWxlIGluZGV4
aW5nIGV4aXN0aW5nIHJlY29yZHMgZm9yIG5ldyBpbmRleC4iKTsKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRyYW5zYWN0aW9uLT5jbG9zZUN1cnNv
cigqY3Vyc29yKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFVuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlOjpkZWxldGVJbmRleChjb25zdCBJREJJZGVudGlmaWVyJiB0
cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRl
eElEKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX3Nx
bGl0ZURCKTsKLSAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOwotCi0gICAgU1FMaXRl
SURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0
aW9uSWRlbnRpZmllcik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rpb24tPmlu
UHJvZ3Jlc3MoKSkgewotICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gZGVsZXRlIGluZGV4
IHdpdGhvdXQgYW4gZXN0YWJsaXNoZWQsIGluLXByb2dyZXNzIHRyYW5zYWN0aW9uIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgIT0g
SW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlZlcnNpb25DaGFuZ2UpIHsKLSAgICAgICAgTE9H
X0VSUk9SKCJBdHRlbXB0IHRvIGRlbGV0ZSBpbmRleCBkdXJpbmcgYSBub24tdmVyc2lvbi1jaGFu
Z2UgdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHsK
LSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJE
RUxFVEUgRlJPTSBJbmRleEluZm8gV0hFUkUgaWQgPSA/IEFORCBvYmplY3RTdG9yZUlEID0gPzsi
KSk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAgICAg
fHwgc3FsLmJpbmRJbnQ2NCgxLCBpbmRleElEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8
IHNxbC5iaW5kSW50NjQoMiwgb2JqZWN0U3RvcmVJRCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAg
ICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1Io
IkNvdWxkIG5vdCBkZWxldGUgaW5kZXggaWQgJSIgUFJJaTY0ICIgZnJvbSBJbmRleEluZm8gdGFi
bGUgKCVpKSAtICVzIiwgb2JqZWN0U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1f
c3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9z
cWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJERUxFVEUgRlJPTSBJbmRleFJlY29yZHMgV0hFUkUgaW5k
ZXhJRCA9ID8gQU5EIG9iamVjdFN0b3JlSUQgPSA/OyIpKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIGluZGV4
SUQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgyLCBvYmplY3RT
dG9yZUlEKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRlbGV0ZSBpbmRleCBy
ZWNvcmRzIGZvciBpbmRleCBpZCAlIiBQUklpNjQgIiBmcm9tIEluZGV4UmVjb3JkcyB0YWJsZSAo
JWkpIC0gJXMiLCBpbmRleElELCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmVTUUxpdGU6OmdlbmVyYXRlS2V5TnVtYmVyKGNvbnN0IElEQklkZW50aWZpZXImIHRy
YW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90JiBnZW5l
cmF0ZWRLZXkpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJU
KG1fc3FsaXRlREIpOwotICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7Ci0KLSAgICAv
LyBUaGUgSW5kZXhlZERhdGFiYXNlIHNwZWMgZGVmaW5lcyB0aGUgbWF4IGtleSBnZW5lcmF0b3Ig
dmFsdWUgYXMgMl41MzsKLSAgICBzdGF0aWMgY29uc3QgaW50NjRfdCBtYXhHZW5lcmF0b3JWYWx1
ZSA9IDkwMDcxOTkyNTQ3NDA5OTJMTDsKLQotICAgIFNRTGl0ZUlEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwotICAg
IGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGdlbmVyYXRlIGtleSBpbiBkYXRhYmFzZSB3aXRob3V0
IGFuIGVzdGFibGlzaGVkLCBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbiIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seSkgewotICAgICAgICBMT0dfRVJST1IoIkF0dGVt
cHQgdG8gZ2VuZXJhdGUga2V5IGluIGRhdGFiYXNlIGR1cmluZyByZWFkLW9ubHkgdHJhbnNhY3Rp
b24iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGludDY0X3QgY3VycmVu
dFZhbHVlOwotICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwg
QVNDSUlMaXRlcmFsKCJTRUxFQ1QgY3VycmVudEtleSBGUk9NIEtleUdlbmVyYXRvcnMgV0hFUkUg
b2JqZWN0U3RvcmVJRCA9ID87IikpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJ
VEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJRCkgIT0g
U1FMSVRFX09LKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBkZWxldGUgaW5k
ZXggaWQgJSIgUFJJaTY0ICIgZnJvbSBJbmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgb2JqZWN0
U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpbnQg
cmVzdWx0ID0gc3FsLnN0ZXAoKTsKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7
Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCByZXRyZWl2ZSBrZXkgZ2VuZXJhdG9y
IHZhbHVlIGZvciBvYmplY3Qgc3RvcmUsIGJ1dCBpdCBzaG91bGQgYmUgdGhlcmUuIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBjdXJyZW50VmFsdWUg
PSBzcWwuZ2V0Q29sdW1uSW50NjQoMCk7Ci0gICAgfQotCi0gICAgaWYgKGN1cnJlbnRWYWx1ZSA8
IDAgfHwgY3VycmVudFZhbHVlID4gbWF4R2VuZXJhdG9yVmFsdWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGdlbmVyYXRlZEtleSA9IGN1cnJlbnRWYWx1ZSArIDE7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OnVw
ZGF0ZUtleUdlbmVyYXRvck51bWJlcihjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklk
ZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBrZXlOdW1iZXIsIGJvb2wp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKG1fc3FsaXRl
REIpOwotICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7Ci0KLSAgICBTUUxpdGVJREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25J
ZGVudGlmaWVyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9n
cmVzcygpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byB1cGRhdGUga2V5IGdlbmVy
YXRvciBpbiBkYXRhYmFzZSB3aXRob3V0IGFuIGVzdGFibGlzaGVkLCBpbi1wcm9ncmVzcyB0cmFu
c2FjdGlvbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh0cmFuc2Fj
dGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlOjpSZWFkT25seSkgewot
ICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gdXBkYXRlIGtleSBnZW5lcmF0b3IgaW4gZGF0
YWJhc2UgZHVyaW5nIHJlYWQtb25seSB0cmFuc2FjdGlvbiIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0
ZURCLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBJTlRPIEtleUdlbmVyYXRvcnMgVkFMVUVTICg/LCA/
KTsiKSk7Ci0gICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSwotICAgICAgICAg
ICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlEKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMiwga2V5TnVtYmVyKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IHVwZGF0ZSBrZXkgZ2VuZXJhdG9yIHZhbHVlICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNRTGl0ZTo6a2V5RXhp
c3RzSW5PYmplY3RTdG9yZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgYm9v
bCYga2V5RXhpc3RzKQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFT
U0VSVChtX3NxbGl0ZURCKTsKLSAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOwotCi0g
ICAga2V5RXhpc3RzID0gZmFsc2U7Ci0KLSAgICBTUUxpdGVJREJUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLSAgICBp
ZiAoIXRyYW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7Ci0gICAgICAg
IExPR19FUlJPUigiQXR0ZW1wdCB0byBzZWUgaWYga2V5IGV4aXN0cyBpbiBvYmplY3RzdG9yZSB3
aXRob3V0IGVzdGFibGlzaGVkLCBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbiIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4ga2V5QnVmZmVy
ID0gc2VyaWFsaXplSURCS2V5RGF0YShrZXlEYXRhKTsKLSAgICBpZiAoIWtleUJ1ZmZlcikgewot
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXJpYWxpemUgSURCS2V5IHRvIGNoZWNrIGZv
ciBleGlzdGVuY2UiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIGtleSBGUk9N
IFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA9IENBU1QoPyBBUyBURVhU
KSBMSU1JVCAxOyIpKTsKLSAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZUlEKSAhPSBTUUxJVEVfT0sKLSAgICAg
ICAgfHwgc3FsLmJpbmRCbG9iKDIsIGtleUJ1ZmZlci0+ZGF0YSgpLCBrZXlCdWZmZXItPnNpemUo
KSkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGdldCByZWNv
cmQgZnJvbSBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgZnJvbSBSZWNvcmRzIHRhYmxlICglaSkg
LSAlcyIsIG9iamVjdFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
bnQgc3FsUmVzdWx0ID0gc3FsLnN0ZXAoKTsKLSAgICBpZiAoc3FsUmVzdWx0ID09IFNRTElURV9P
SyB8fCBzcWxSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAga2V5RXhpc3RzID0gZmFs
c2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGlmIChzcWxSZXN1bHQgIT0g
U1FMSVRFX1JPVykgewotICAgICAgICAvLyBUaGVyZSB3YXMgYW4gZXJyb3IgZmV0Y2hpbmcgdGhl
IHJlY29yZCBmcm9tIHRoZSBkYXRhYmFzZS4KLSAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
Y2hlY2sgaWYga2V5IGV4aXN0cyBpbiBvYmplY3Qgc3RvcmUgKCVpKSAtICVzIiwgbV9zcWxpdGVE
Qi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGtleUV4aXN0cyA9IHRydWU7Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OnB1dFJl
Y29yZChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qg
b2JqZWN0U3RvcmVJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgdWludDhfdCog
dmFsdWVCdWZmZXIsIHNpemVfdCB2YWx1ZVNpemUpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjpp
c01haW4oKSk7Ci0gICAgQVNTRVJUKG1fc3FsaXRlREIpOwotICAgIEFTU0VSVChtX3NxbGl0ZURC
LT5pc09wZW4oKSk7Ci0KLSAgICBTUUxpdGVJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBt
X3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLSAgICBpZiAoIXRyYW5z
YWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIExPR19FUlJP
UigiQXR0ZW1wdCB0byBwdXQgYSByZWNvcmQgaW50byBkYXRhYmFzZSB3aXRob3V0IGFuIGVzdGFi
bGlzaGVkLCBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpID09IEluZGV4ZWREQjo6VHJhbnNh
Y3Rpb25Nb2RlOjpSZWFkT25seSkgewotICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gcHV0
IGEgcmVjb3JkIGludG8gZGF0YWJhc2UgZHVyaW5nIHJlYWQtb25seSB0cmFuc2FjdGlvbiIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
a2V5QnVmZmVyID0gc2VyaWFsaXplSURCS2V5RGF0YShrZXlEYXRhKTsKLSAgICBpZiAoIWtleUJ1
ZmZlcikgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXJpYWxpemUgSURCS2V5IHRv
IGJlIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJ
TGl0ZXJhbCgiSU5TRVJUIElOVE8gUmVjb3JkcyBWQUxVRVMgKD8sIENBU1QoPyBBUyBURVhUKSwg
Pyk7IikpOwotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHNxbC5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJRCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBzcWwuYmluZEJsb2IoMiwga2V5QnVmZmVyLT5kYXRhKCksIGtleUJ1ZmZlci0+
c2l6ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5kQmxvYigzLCB2YWx1
ZUJ1ZmZlciwgdmFsdWVTaXplKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVw
KCkgIT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHB1
dCByZWNvcmQgZm9yIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBpbiBSZWNvcmRzIHRhYmxlICgl
aSkgLSAlcyIsIG9iamVjdFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZTo6cHV0SW5kZXhSZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5k
ZXhJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5VmFsdWUsIGNvbnN0IElEQktleURhdGEmIGluZGV4
S2V5KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX3Nx
bGl0ZURCKTsKLSAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOwotCi0gICAgU1FMaXRl
SURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0
aW9uSWRlbnRpZmllcik7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rpb24tPmlu
UHJvZ3Jlc3MoKSkgewotICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gcHV0IGluZGV4IHJl
Y29yZCBpbnRvIGRhdGFiYXNlIHdpdGhvdXQgYW4gZXN0YWJsaXNoZWQsIGluLXByb2dyZXNzIHRy
YW5zYWN0aW9uIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHRyYW5z
YWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5KSB7
Ci0gICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBwdXQgaW5kZXggcmVjb3JkIGludG8gZGF0
YWJhc2UgZHVyaW5nIHJlYWQtb25seSB0cmFuc2FjdGlvbiIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKG9iamVjdFN0
b3JlSUQsIGluZGV4SUQsIGtleVZhbHVlLCBpbmRleEtleSk7Ci19Ci0KLWJvb2wgVW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0
X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25zdCBXZWJDb3JlOjpJREJLZXlE
YXRhJiBrZXlWYWx1ZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYgaW5kZXhLZXkpCi17Ci0g
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gaW5kZXhLZXlCdWZmZXIgPSBzZXJpYWxpemVJREJLZXlE
YXRhKGluZGV4S2V5KTsKLSAgICBpZiAoIWluZGV4S2V5QnVmZmVyKSB7Ci0gICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIHNlcmlhbGl6ZSBpbmRleCBrZXkgdG8gYmUgc3RvcmVkIGluIHRoZSBk
YXRhYmFzZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gdmFsdWVCdWZmZXIgPSBzZXJpYWxpemVJREJLZXlEYXRhKGtleVZhbHVlKTsK
LSAgICBpZiAoIXZhbHVlQnVmZmVyKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNl
cmlhbGl6ZSB0aGUgdmFsdWUgdG8gYmUgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNx
bCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgSU5UTyBJbmRleFJlY29yZHMgVkFM
VUVTICg/LCA/LCBDQVNUKD8gQVMgVEVYVCksIENBU1QoPyBBUyBURVhUKSk7IikpOwotICAgICAg
ICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5iaW5k
SW50NjQoMSwgaW5kZXhJRCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZElu
dDY0KDIsIG9iamVjdFN0b3JlSUQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJp
bmRCbG9iKDMsIGluZGV4S2V5QnVmZmVyLT5kYXRhKCksIGluZGV4S2V5QnVmZmVyLT5zaXplKCkp
ICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDQsIHZhbHVlQnVmZmVy
LT5kYXRhKCksIHZhbHVlQnVmZmVyLT5zaXplKCkpICE9IFNRTElURV9PSwotICAgICAgICAgICAg
fHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgcHV0IGluZGV4IHJlY29yZCBmb3IgaW5kZXggJSIgUFJJaTY0ICIgaW4gb2JqZWN0
IHN0b3JlICUiIFBSSWk2NCAiIGluIFJlY29yZHMgdGFibGUgKCVpKSAtICVzIiwgaW5kZXhJRCwg
b2JqZWN0U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RF
cnJvck1zZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlOjpnZXRJbmRleFJlY29yZChjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlv
bklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaW50NjRfdCBpbmRleElELCBjb25z
dCBJREJLZXlSYW5nZURhdGEmIGtleVJhbmdlRGF0YSwgSW5kZXhlZERCOjpDdXJzb3JUeXBlIGN1
cnNvclR5cGUsIElEQkdldFJlc3VsdCYgcmVzdWx0KQotewotICAgIEFTU0VSVCghUnVuTG9vcDo6
aXNNYWluKCkpOwotICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKLSAgICBBU1NFUlQobV9zcWxpdGVE
Qi0+aXNPcGVuKCkpOwotCi0gICAgU1FMaXRlSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uID0g
bV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Ci0gICAgaWYgKCF0cmFu
c2FjdGlvbiB8fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgewotICAgICAgICBMT0dfRVJS
T1IoIkF0dGVtcHQgdG8gZ2V0IGNvdW50IGZyb20gZGF0YWJhc2Ugd2l0aG91dCBhbiBlc3RhYmxp
c2hlZCwgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIFNRTGl0ZUlEQkN1cnNvciogY3Vyc29yID0gdHJhbnNhY3Rpb24tPm9wZW5D
dXJzb3Iob2JqZWN0U3RvcmVJRCwgaW5kZXhJRCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb246
Ok5leHQsIGN1cnNvclR5cGUsIElEQkRhdGFiYXNlQmFja2VuZDo6Tm9ybWFsVGFzaywga2V5UmFu
Z2VEYXRhKTsKLQotICAgIGlmICghY3Vyc29yKSB7Ci0gICAgICAgIExPR19FUlJPUigiQ2Fubm90
IG9wZW4gY3Vyc29yIHRvIHBlcmZvcm0gaW5kZXggZ2V0IGluIGRhdGFiYXNlIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBFdmVuIHRob3VnaCB3ZSdyZSBvbmx5IHVz
aW5nIHRoaXMgY3Vyc29yIGxvY2FsbHksIGFkZCBpdCB0byBvdXIgY3Vyc29yIHNldC4KLSAgICBt
X2N1cnNvcnMuc2V0KGN1cnNvci0+aWRlbnRpZmllcigpLCBjdXJzb3IpOwotCi0gICAgaWYgKGN1
cnNvclR5cGUgPT0gSW5kZXhlZERCOjpDdXJzb3JUeXBlOjpLZXlPbmx5KQotICAgICAgICByZXN1
bHQgPSBJREJHZXRSZXN1bHQoY3Vyc29yLT5jdXJyZW50UHJpbWFyeUtleSgpKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgcmVzdWx0ID0gSURCR2V0UmVzdWx0KFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGN1
cnNvci0+Y3VycmVudFZhbHVlQnVmZmVyKCkuZGF0YSgpLCBjdXJzb3ItPmN1cnJlbnRWYWx1ZUJ1
ZmZlcigpLnNpemUoKSkpOwotICAgICAgICByZXN1bHQuc2V0S2V5RGF0YShjdXJzb3ItPmN1cnJl
bnRQcmltYXJ5S2V5KCkpOwotICAgIH0KLQotICAgIC8vIENsb3NpbmcgdGhlIGN1cnNvciB3aWxs
IGRlc3Ryb3kgdGhlIGN1cnNvciBvYmplY3QgYW5kIHJlbW92ZSBpdCBmcm9tIG91ciBjdXJzb3Ig
c2V0LgotICAgIHRyYW5zYWN0aW9uLT5jbG9zZUN1cnNvcigqY3Vyc29yKTsKLQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpk
ZWxldGVSZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBp
bnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmIGtleURhdGEp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKG1fc3FsaXRl
REIpOwotICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7Ci0KLSAgICBTUUxpdGVJREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25J
ZGVudGlmaWVyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9n
cmVzcygpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBnZXQgY291bnQgZnJvbSBk
YXRhYmFzZSB3aXRob3V0IGFuIGVzdGFibGlzaGVkLCBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbiIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHRyYW5zYWN0aW9uLT5t
b2RlKCkgPT0gSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5KSB7Ci0gICAgICAg
IExPR19FUlJPUigiQXR0ZW1wdCB0byBkZWxldGUgcmFuZ2UgZnJvbSBhIHJlYWQtb25seSB0cmFu
c2FjdGlvbiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIGRl
bGV0ZVJlY29yZCgqdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSUQsIGtleURhdGEpOwotfQotCi1i
b29sIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpkZWxldGVSYW5nZShjb25z
dCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJRCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlSYW5nZURhdGEpCi17Ci0gICAgQVNTRVJU
KCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKG1fc3FsaXRlREIpOwotICAgIEFTU0VS
VChtX3NxbGl0ZURCLT5pc09wZW4oKSk7Ci0KLSAgICBTUUxpdGVJREJUcmFuc2FjdGlvbiogdHJh
bnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKLSAg
ICBpZiAoIXRyYW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7Ci0gICAg
ICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBnZXQgY291bnQgZnJvbSBkYXRhYmFzZSB3aXRob3V0
IGFuIGVzdGFibGlzaGVkLCBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbiIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSW5kZXhl
ZERCOjpUcmFuc2FjdGlvbk1vZGU6OlJlYWRPbmx5KSB7Ci0gICAgICAgIExPR19FUlJPUigiQXR0
ZW1wdCB0byBkZWxldGUgcmFuZ2UgZnJvbSBhIHJlYWQtb25seSB0cmFuc2FjdGlvbiIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSWYgdGhlIHJhbmdlIHRvIGRlbGV0
ZSBpcyBleGFjdGx5IG9uZSBrZXkgd2UgY2FuIGRlbGV0ZSBpdCByaWdodCBub3cuCi0gICAgaWYg
KGtleVJhbmdlRGF0YS5pc0V4YWN0bHlPbmVLZXkoKSkgewotICAgICAgICBpZiAoIWRlbGV0ZVJl
Y29yZCgqdHJhbnNhY3Rpb24sIG9iamVjdFN0b3JlSUQsIGtleVJhbmdlRGF0YS5sb3dlcktleSkp
IHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSByZWNvcmQgZm9yIGtl
eSAnJXMnIiwga2V5UmFuZ2VEYXRhLmxvd2VyS2V5LmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UgdGhlIHJhbmdlIG1pZ2h0IHNwYW4g
bXVsdGlwbGUga2V5cyBzbyB3ZSBjb2xsZWN0IHRoZW0gd2l0aCBhIGN1cnNvci4KLSAgICBTUUxp
dGVJREJDdXJzb3IqIGN1cnNvciA9IHRyYW5zYWN0aW9uLT5vcGVuQ3Vyc29yKG9iamVjdFN0b3Jl
SUQsIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rp
b246Ok5leHQsIEluZGV4ZWREQjo6Q3Vyc29yVHlwZTo6S2V5QW5kVmFsdWUsIElEQkRhdGFiYXNl
QmFja2VuZDo6Tm9ybWFsVGFzaywga2V5UmFuZ2VEYXRhKTsKLQotICAgIGlmICghY3Vyc29yKSB7
Ci0gICAgICAgIExPR19FUlJPUigiQ2Fubm90IG9wZW4gY3Vyc29yIHRvIHBlcmZvcm0gaW5kZXgg
Z2V0IGluIGRhdGFiYXNlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBt
X2N1cnNvcnMuc2V0KGN1cnNvci0+aWRlbnRpZmllcigpLCBjdXJzb3IpOwotCi0gICAgVmVjdG9y
PElEQktleURhdGE+IGtleXM7Ci0gICAgZG8KLSAgICAgICAga2V5cy5hcHBlbmQoY3Vyc29yLT5j
dXJyZW50S2V5KCkpOwotICAgIHdoaWxlIChjdXJzb3ItPmFkdmFuY2UoMSkpOwotCi0gICAgYm9v
bCBjdXJzb3JEaWRFcnJvciA9IGN1cnNvci0+ZGlkRXJyb3IoKTsKLQotICAgIC8vIGNsb3NlQ3Vy
c29yKCkgd2lsbCByZW1vdmUgdGhlIGN1cnNvciBmcm9tIG1fY3Vyc29ycyBhbmQgZGVsZXRlIHRo
ZSBjdXJzb3Igb2JqZWN0Ci0gICAgdHJhbnNhY3Rpb24tPmNsb3NlQ3Vyc29yKCpjdXJzb3IpOwot
Ci0gICAgaWYgKGN1cnNvckRpZEVycm9yKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IGl0ZXJhdGUgb3ZlciBvYmplY3Qgc3RvcmUgdG8gZGVsZXRlUmFuZ2UgaW4gZGF0YWJhc2UiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoYXV0byYga2V5IDoga2V5
cykgewotICAgICAgICBpZiAoIWRlbGV0ZVJlY29yZCgqdHJhbnNhY3Rpb24sIG9iamVjdFN0b3Jl
SUQsIGtleSkpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGRlbGV0ZSByZWNv
cmQgZm9yIGtleSAnJXMnIiwga2V5LmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjpkZWxl
dGVSZWNvcmQoU1FMaXRlSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBpbnQ2NF90IG9iamVj
dFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmIGtleSkKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQobV9zcWxpdGVEQik7Ci0gICAgQVNTRVJU
KG1fc3FsaXRlREItPmlzT3BlbigpKTsKLQotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleUJ1
ZmZlciA9IHNlcmlhbGl6ZUlEQktleURhdGEoa2V5KTsKLSAgICBpZiAoIWtleUJ1ZmZlcikgewot
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXJpYWxpemUgSURCS2V5RGF0YSB0byBiZSBy
ZW1vdmVkIGZyb20gdGhlIGRhdGFiYXNlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBEZWxldGUgcmVjb3JkIGZyb20gb2JqZWN0IHN0b3JlCi0gICAgewotICAgICAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIkRFTEVURSBG
Uk9NIFJlY29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA9IENBU1QoPyBBUyBU
RVhUKTsiKSk7Ci0KLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIG9iamVjdFN0b3JlSUQpICE9IFNRTElURV9PSwot
ICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDIsIGtleUJ1ZmZlci0+ZGF0YSgpLCBrZXlCdWZm
ZXItPnNpemUoKSkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNR
TElURV9ET05FKSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBkZWxldGUgcmVj
b3JkIGZyb20gb2JqZWN0IHN0b3JlICUiIFBSSWk2NCAiICglaSkgLSAlcyIsIG9iamVjdFN0b3Jl
SUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBE
ZWxldGUgcmVjb3JkIGZyb20gaW5kZXhlcyBzdG9yZQotICAgIHsKLSAgICAgICAgU1FMaXRlU3Rh
dGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJERUxFVEUgRlJPTSBJbmRleFJl
Y29yZHMgV0hFUkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIHZhbHVlID0gQ0FTVCg/IEFTIFRFWFQp
OyIpKTsKLQotICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKLSAgICAgICAg
ICAgIHx8IHNxbC5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVJRCkgIT0gU1FMSVRFX09LCi0gICAg
ICAgICAgICB8fCBzcWwuYmluZEJsb2IoMiwga2V5QnVmZmVyLT5kYXRhKCksIGtleUJ1ZmZlci0+
c2l6ZSgpKSAhPSBTUUxJVEVfT0sKLSAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRF
X0RPTkUpIHsKLSAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGRlbGV0ZSByZWNvcmQg
ZnJvbSBpbmRleGVzIGZvciBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgKCVpKSAtICVzIiwgb2Jq
ZWN0U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3Jl
U1FMaXRlOjpnZXRLZXlSZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYg
dHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IElEQktl
eSYga2V5LCBSZWZQdHI8U2hhcmVkQnVmZmVyPiYgcmVzdWx0KQotewotICAgIEFTU0VSVCghUnVu
TG9vcDo6aXNNYWluKCkpOwotICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKLSAgICBBU1NFUlQobV9z
cWxpdGVEQi0+aXNPcGVuKCkpOwotCi0gICAgU1FMaXRlSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7Ci0gICAgaWYg
KCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgewotICAgICAgICBM
T0dfRVJST1IoIkF0dGVtcHQgdG8gcHV0IGEgcmVjb3JkIGludG8gZGF0YWJhc2Ugd2l0aG91dCBh
biBlc3RhYmxpc2hlZCwgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGtleUJ1ZmZlciA9IHNl
cmlhbGl6ZUlEQktleURhdGEoSURCS2V5RGF0YSgma2V5KSk7Ci0gICAgaWYgKCFrZXlCdWZmZXIp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gc2VyaWFsaXplIElEQktleSB0byBiZSBz
dG9yZWQgaW4gdGhlIGRhdGFiYXNlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0
ZXJhbCgiU0VMRUNUIHZhbHVlIEZST00gUmVjb3JkcyBXSEVSRSBvYmplY3RTdG9yZUlEID0gPyBB
TkQga2V5ID0gQ0FTVCg/IEFTIFRFWFQpOyIpKTsKLSAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkg
IT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIG9iamVjdFN0b3Jl
SUQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDIsIGtleUJ1ZmZl
ci0+ZGF0YSgpLCBrZXlCdWZmZXItPnNpemUoKSkgIT0gU1FMSVRFX09LKSB7Ci0gICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBnZXQgcmVjb3JkIGZyb20gb2JqZWN0IHN0b3JlICUiIFBS
SWk2NCAiIGZyb20gUmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBvYmplY3RTdG9yZUlELCBtX3Nx
bGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IHNxbFJlc3VsdCA9
IHNxbC5zdGVwKCk7Ci0gICAgICAgIGlmIChzcWxSZXN1bHQgPT0gU1FMSVRFX09LIHx8IHNxbFJl
c3VsdCA9PSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgLy8gVGhlcmUgd2FzIG5vIHJlY29y
ZCBmb3IgdGhlIGtleSBpbiB0aGUgZGF0YWJhc2UuCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoc3FsUmVzdWx0ICE9IFNRTElURV9ST1cpIHsKLSAgICAg
ICAgICAgIC8vIFRoZXJlIHdhcyBhbiBlcnJvciBmZXRjaGluZyB0aGUgcmVjb3JkIGZyb20gdGhl
IGRhdGFiYXNlLgotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgZ2V0IHJlY29yZCBm
cm9tIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBmcm9tIFJlY29yZHMgdGFibGUgKCVpKSAtICVz
Iiwgb2JqZWN0U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxh
c3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0g
ICAgICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7Ci0gICAgICAgIHNxbC5nZXRDb2x1bW5CbG9iQXNW
ZWN0b3IoMCwgYnVmZmVyKTsKLSAgICAgICAgcmVzdWx0ID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUo
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlci5kYXRhKCkpLCBidWZmZXIuc2l6ZSgpKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBVbmlxdWVJREJEYXRhYmFzZUJh
Y2tpbmdTdG9yZVNRTGl0ZTo6Z2V0S2V5UmFuZ2VSZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3Qg
SURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SUQsIGNvbnN0IElEQktleVJhbmdlJiBrZXlSYW5nZSwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4mIHJl
c3VsdCwgUmVmUHRyPElEQktleT4mIHJlc3VsdEtleSkKLXsKLSAgICBBU1NFUlQoIVJ1bkxvb3A6
OmlzTWFpbigpKTsKLSAgICBBU1NFUlQobV9zcWxpdGVEQik7Ci0gICAgQVNTRVJUKG1fc3FsaXRl
REItPmlzT3BlbigpKTsKLQotICAgIFNRTGl0ZUlEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiA9
IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwotICAgIGlmICghdHJh
bnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsKLSAgICAgICAgTE9HX0VS
Uk9SKCJBdHRlbXB0IHRvIHB1dCBhIHJlY29yZCBpbnRvIGRhdGFiYXNlIHdpdGhvdXQgYW4gZXN0
YWJsaXNoZWQsIGluLXByb2dyZXNzIHRyYW5zYWN0aW9uIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBsb3dlckJ1ZmZlciA9IHNlcmlh
bGl6ZUlEQktleURhdGEoSURCS2V5RGF0YShrZXlSYW5nZS5sb3dlcigpLmdldCgpKSk7Ci0gICAg
aWYgKCFsb3dlckJ1ZmZlcikgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXJpYWxp
emUgSURCS2V5IHRvIGJlIHN0b3JlZCBpbiB0aGUgZGF0YWJhc2UiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHVwcGVyQnVmZmVyID0g
c2VyaWFsaXplSURCS2V5RGF0YShJREJLZXlEYXRhKGtleVJhbmdlLnVwcGVyKCkuZ2V0KCkpKTsK
LSAgICBpZiAoIXVwcGVyQnVmZmVyKSB7Ci0gICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNl
cmlhbGl6ZSBJREJLZXkgdG8gYmUgc3RvcmVkIGluIHRoZSBkYXRhYmFzZSIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3Fs
KCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCB2YWx1ZSBGUk9NIFJlY29yZHMgV0hF
UkUgb2JqZWN0U3RvcmVJRCA9ID8gQU5EIGtleSA+PSBDQVNUKD8gQVMgVEVYVCkgQU5EIGtleSA8
PSBDQVNUKD8gQVMgVEVYVCkgT1JERVIgQlkga2V5OyIpKTsKLSAgICAgICAgaWYgKHNxbC5wcmVw
YXJlKCkgIT0gU1FMSVRFX09LCi0gICAgICAgICAgICB8fCBzcWwuYmluZEludDY0KDEsIG9iamVj
dFN0b3JlSUQpICE9IFNRTElURV9PSwotICAgICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDIsIGxv
d2VyQnVmZmVyLT5kYXRhKCksIGxvd2VyQnVmZmVyLT5zaXplKCkpICE9IFNRTElURV9PSwotICAg
ICAgICAgICAgfHwgc3FsLmJpbmRCbG9iKDMsIHVwcGVyQnVmZmVyLT5kYXRhKCksIHVwcGVyQnVm
ZmVyLT5zaXplKCkpICE9IFNRTElURV9PSykgewotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3Vs
ZCBub3QgZ2V0IGtleSByYW5nZSByZWNvcmQgZnJvbSBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIg
ZnJvbSBSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSUQsIG1fc3FsaXRlREIt
Pmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgc3FsUmVzdWx0ID0gc3FsLnN0
ZXAoKTsKLQotICAgICAgICBpZiAoc3FsUmVzdWx0ID09IFNRTElURV9PSyB8fCBzcWxSZXN1bHQg
PT0gU1FMSVRFX0RPTkUpIHsKLSAgICAgICAgICAgIC8vIFRoZXJlIHdhcyBubyByZWNvcmQgZm9y
IHRoZSBrZXkgaW4gdGhlIGRhdGFiYXNlLgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKHNxbFJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7Ci0gICAgICAgICAg
ICAvLyBUaGVyZSB3YXMgYW4gZXJyb3IgZmV0Y2hpbmcgdGhlIHJlY29yZCBmcm9tIHRoZSBkYXRh
YmFzZS4KLSAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGdldCByZWNvcmQgZnJvbSBv
YmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgZnJvbSBSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG9i
amVjdFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJy
b3JNc2coKSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBWZWN0b3I8Y2hhcj4gYnVmZmVyOwotICAgICAgICBzcWwuZ2V0Q29sdW1uQmxvYkFzVmVjdG9y
KDAsIGJ1ZmZlcik7Ci0gICAgICAgIHJlc3VsdCA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihidWZmZXIuZGF0YSgpKSwgYnVmZmVyLnNpemUoKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5n
U3RvcmVTUUxpdGU6OmNvdW50KGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQsIGNvbnN0IElEQktl
eVJhbmdlRGF0YSYga2V5UmFuZ2VEYXRhLCBpbnQ2NF90JiBjb3VudCkKLXsKLSAgICBBU1NFUlQo
IVJ1bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQobV9zcWxpdGVEQik7Ci0gICAgQVNTRVJU
KG1fc3FsaXRlREItPmlzT3BlbigpKTsKLQotICAgIFNRTGl0ZUlEQlRyYW5zYWN0aW9uKiB0cmFu
c2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwotICAg
IGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsKLSAgICAg
ICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGdldCBjb3VudCBmcm9tIGRhdGFiYXNlIHdpdGhvdXQg
YW4gZXN0YWJsaXNoZWQsIGluLXByb2dyZXNzIHRyYW5zYWN0aW9uIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0KLSAgICBTUUxpdGVJREJDdXJzb3IqIGN1cnNvciA9IHRyYW5zYWN0
aW9uLT5vcGVuQ3Vyc29yKG9iamVjdFN0b3JlSUQsIGluZGV4SUQsIEluZGV4ZWREQjo6Q3Vyc29y
RGlyZWN0aW9uOjpOZXh0LCBJbmRleGVkREI6OkN1cnNvclR5cGU6OktleU9ubHksIElEQkRhdGFi
YXNlQmFja2VuZDo6Tm9ybWFsVGFzaywga2V5UmFuZ2VEYXRhKTsKLQotICAgIGlmICghY3Vyc29y
KSB7Ci0gICAgICAgIExPR19FUlJPUigiQ2Fubm90IG9wZW4gY3Vyc29yIHRvIGdldCBjb3VudCBp
biBkYXRhYmFzZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbV9jdXJz
b3JzLnNldChjdXJzb3ItPmlkZW50aWZpZXIoKSwgY3Vyc29yKTsKLQotICAgIGNvdW50ID0gMDsK
LSAgICB3aGlsZSAoY3Vyc29yLT5hZHZhbmNlKDEpKQotICAgICAgICArK2NvdW50OwotCi0gICAg
dHJhbnNhY3Rpb24tPmNsb3NlQ3Vyc29yKCpjdXJzb3IpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6Om9wZW5DdXJzb3Io
Y29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVj
dFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgSW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24gY3Vy
c29yRGlyZWN0aW9uLCBJbmRleGVkREI6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCRGF0YWJh
c2VCYWNrZW5kOjpUYXNrVHlwZSB0YXNrVHlwZSwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiBrZXlS
YW5nZSwgaW50NjRfdCYgY3Vyc29ySUQsIElEQktleURhdGEmIGtleSwgSURCS2V5RGF0YSYgcHJp
bWFyeUtleSwgVmVjdG9yPHVpbnQ4X3Q+JiB2YWx1ZUJ1ZmZlcikKLXsKLSAgICBBU1NFUlQoIVJ1
bkxvb3A6OmlzTWFpbigpKTsKLSAgICBBU1NFUlQobV9zcWxpdGVEQik7Ci0gICAgQVNTRVJUKG1f
c3FsaXRlREItPmlzT3BlbigpKTsKLQotICAgIFNRTGl0ZUlEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklkZW50aWZpZXIpOwotICAgIGlm
ICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpIHsKLSAgICAgICAg
TE9HX0VSUk9SKCJBdHRlbXB0IHRvIG9wZW4gYSBjdXJzb3IgaW4gZGF0YWJhc2Ugd2l0aG91dCBh
biBlc3RhYmxpc2hlZCwgaW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb24iKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIFNRTGl0ZUlEQkN1cnNvciogY3Vyc29yID0gdHJhbnNhY3Rp
b24tPm9wZW5DdXJzb3Iob2JqZWN0U3RvcmVJRCwgaW5kZXhJRCwgY3Vyc29yRGlyZWN0aW9uLCBj
dXJzb3JUeXBlLCB0YXNrVHlwZSwga2V5UmFuZ2UpOwotICAgIGlmICghY3Vyc29yKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX2N1cnNvcnMuc2V0KGN1cnNvci0+aWRlbnRpZmllcigp
LCBjdXJzb3IpOwotICAgIGN1cnNvcklEID0gY3Vyc29yLT5pZGVudGlmaWVyKCkuaWQoKTsKLSAg
ICBrZXkgPSBjdXJzb3ItPmN1cnJlbnRLZXkoKTsKLSAgICBwcmltYXJ5S2V5ID0gY3Vyc29yLT5j
dXJyZW50UHJpbWFyeUtleSgpOwotICAgIHZhbHVlQnVmZmVyID0gY3Vyc29yLT5jdXJyZW50VmFs
dWVCdWZmZXIoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFVuaXF1ZUlEQkRhdGFi
YXNlQmFja2luZ1N0b3JlU1FMaXRlOjphZHZhbmNlQ3Vyc29yKGNvbnN0IElEQklkZW50aWZpZXIm
IGN1cnNvcklkZW50aWZpZXIsIHVpbnQ2NF90IGNvdW50LCBJREJLZXlEYXRhJiBrZXksIElEQktl
eURhdGEmIHByaW1hcnlLZXksIFZlY3Rvcjx1aW50OF90PiYgdmFsdWVCdWZmZXIpCi17Ci0gICAg
QVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKG1fc3FsaXRlREIpOwotICAg
IEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7Ci0KLSAgICBTUUxpdGVJREJDdXJzb3IqIGN1
cnNvciA9IG1fY3Vyc29ycy5nZXQoY3Vyc29ySWRlbnRpZmllcik7Ci0gICAgaWYgKCFjdXJzb3Ip
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGFkdmFuY2UgYSBjdXJzb3IgdGhhdCBk
b2Vzbid0IGV4aXN0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKCFj
dXJzb3ItPnRyYW5zYWN0aW9uKCkgfHwgIWN1cnNvci0+dHJhbnNhY3Rpb24oKS0+aW5Qcm9ncmVz
cygpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBhZHZhbmNlIGEgY3Vyc29yIHdp
dGhvdXQgYW4gZXN0YWJsaXNoZWQsIGluLXByb2dyZXNzIHRyYW5zYWN0aW9uIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWN1cnNvci0+YWR2YW5jZShjb3VudCkp
IHsKLSAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGFkdmFuY2UgY3Vyc29yICUiIFBSSWk2
NCAiIHN0ZXBzIGZhaWxlZCIsIGNvdW50KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIGtleSA9IGN1cnNvci0+Y3VycmVudEtleSgpOwotICAgIHByaW1hcnlLZXkgPSBjdXJz
b3ItPmN1cnJlbnRQcmltYXJ5S2V5KCk7Ci0gICAgdmFsdWVCdWZmZXIgPSBjdXJzb3ItPmN1cnJl
bnRWYWx1ZUJ1ZmZlcigpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVW5pcXVlSURC
RGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6Oml0ZXJhdGVDdXJzb3IoY29uc3QgSURCSWRlbnRp
ZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29uc3QgSURCS2V5RGF0YSYgdGFyZ2V0S2V5LCBJREJL
ZXlEYXRhJiBrZXksIElEQktleURhdGEmIHByaW1hcnlLZXksIFZlY3Rvcjx1aW50OF90PiYgdmFs
dWVCdWZmZXIpCi17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJU
KG1fc3FsaXRlREIpOwotICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7Ci0KLSAgICBT
UUxpdGVJREJDdXJzb3IqIGN1cnNvciA9IG1fY3Vyc29ycy5nZXQoY3Vyc29ySWRlbnRpZmllcik7
Ci0gICAgaWYgKCFjdXJzb3IpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJBdHRlbXB0IHRvIGl0ZXJh
dGUgYSBjdXJzb3IgdGhhdCBkb2Vzbid0IGV4aXN0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKCFjdXJzb3ItPnRyYW5zYWN0aW9uKCkgfHwgIWN1cnNvci0+dHJhbnNh
Y3Rpb24oKS0+aW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBp
dGVyYXRlIGEgY3Vyc29yIHdpdGhvdXQgYW4gZXN0YWJsaXNoZWQsIGluLXByb2dyZXNzIHRyYW5z
YWN0aW9uIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWN1cnNv
ci0+aXRlcmF0ZSh0YXJnZXRLZXkpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBp
dGVyYXRlIGN1cnNvciBmYWlsZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGtleSA9IGN1cnNvci0+Y3VycmVudEtleSgpOwotICAgIHByaW1hcnlLZXkgPSBjdXJzb3It
PmN1cnJlbnRQcmltYXJ5S2V5KCk7Ci0gICAgdmFsdWVCdWZmZXIgPSBjdXJzb3ItPmN1cnJlbnRW
YWx1ZUJ1ZmZlcigpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVW5pcXVlSURCRGF0
YWJhc2VCYWNraW5nU3RvcmVTUUxpdGU6Om5vdGlmeUN1cnNvcnNPZkNoYW5nZXMoY29uc3QgSURC
SWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQp
Ci17Ci0gICAgQVNTRVJUKCFSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKG1fc3FsaXRl
REIpOwotICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7Ci0KLSAgICBTUUxpdGVJREJU
cmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25J
ZGVudGlmaWVyKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9n
cmVzcygpKSB7Ci0gICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBub3RpZnkgY3Vyc29ycyBv
ZiBjaGFuZ2VzIGluIGRhdGFiYXNlIHdpdGhvdXQgYW4gZXN0YWJsaXNoZWQsIGluLXByb2dyZXNz
IHRyYW5zYWN0aW9uIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0cmFuc2FjdGlv
bi0+bm90aWZ5Q3Vyc29yc09mQ2hhbmdlcyhvYmplY3RTdG9yZUlEKTsKLX0KLQotaW50IFVuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlOjppZGJLZXlDb2xsYXRlKGludCBhTGVuZ3Ro
LCBjb25zdCB2b2lkKiBhQnVmZmVyLCBpbnQgYkxlbmd0aCwgY29uc3Qgdm9pZCogYkJ1ZmZlcikK
LXsKLSAgICBJREJLZXlEYXRhIGEsIGI7Ci0gICAgaWYgKCFkZXNlcmlhbGl6ZUlEQktleURhdGEo
c3RhdGljX2Nhc3Q8Y29uc3QgdWludDhfdCo+KGFCdWZmZXIpLCBhTGVuZ3RoLCBhKSkgewotICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBkZXNlcmlhbGl6ZSBrZXkgQSBpbiBjb2xsYXRpb24g
ZnVuY3Rpb24uIik7Ci0KLSAgICAgICAgLy8gVGhlcmUncyBubyB3YXkgdG8gaW5kaWNhdGUgYW4g
ZXJyb3IgdG8gU1FMaXRlIC0gd2UgaGF2ZSB0byByZXR1cm4gYSBzb3J0aW5nIGRlY2lzaW9uLgot
ICAgICAgICAvLyBXZSBhcmJpdHJhcmlseSBjaG9vc2UgIkEgPiBCIgotICAgICAgICByZXR1cm4g
MTsKLSAgICB9Ci0gICAgaWYgKCFkZXNlcmlhbGl6ZUlEQktleURhdGEoc3RhdGljX2Nhc3Q8Y29u
c3QgdWludDhfdCo+KGJCdWZmZXIpLCBiTGVuZ3RoLCBiKSkgewotICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBkZXNlcmlhbGl6ZSBrZXkgQiBpbiBjb2xsYXRpb24gZnVuY3Rpb24uIik7Ci0K
LSAgICAgICAgLy8gVGhlcmUncyBubyB3YXkgdG8gaW5kaWNhdGUgYW4gZXJyb3IgdG8gU1FMaXRl
IC0gd2UgaGF2ZSB0byByZXR1cm4gYSBzb3J0aW5nIGRlY2lzaW9uLgotICAgICAgICAvLyBXZSBh
cmJpdHJhcmlseSBjaG9vc2UgIkEgPiBCIgotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gYS5jb21wYXJlKGIpOwotfQotCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2lu
Z1N0b3JlU1FMaXRlOjp1bnJlZ2lzdGVyQ3Vyc29yKFNRTGl0ZUlEQkN1cnNvciogY3Vyc29yKQot
ewotICAgIEFTU0VSVChtX2N1cnNvcnMuY29udGFpbnMoY3Vyc29yLT5pZGVudGlmaWVyKCkpKTsK
LSAgICBtX2N1cnNvcnMucmVtb3ZlKGN1cnNvci0+aWRlbnRpZmllcigpKTsKLX0KLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYg
RU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZVNRTGl0ZS5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9zcWxp
dGUvVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggODg5ZDIyNC4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvSW5kZXhlZERCL3NxbGl0ZS9VbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZVNRTGl0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlX2gKLSNkZWZpbmUgVW5p
cXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGVfaAotCi0jaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQotCi0jaW5jbHVkZSAiTGVnYWN5
VW5pcXVlSURCRGF0YWJhc2UuaCIgCi0jaW5jbHVkZSAiVW5pcXVlSURCRGF0YWJhc2VCYWNraW5n
U3RvcmUuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9TdHJvbmcuaD4KLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1l
c3BhY2UgSlNDIHsKLWNsYXNzIEpTR2xvYmFsT2JqZWN0OwotY2xhc3MgVk07Ci19Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLWNsYXNzIFNRTGl0ZURhdGFiYXNlOwotc3RydWN0IElEQkRhdGFiYXNl
TWV0YWRhdGE7Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBTUUxpdGVJREJDdXJz
b3I7Ci1jbGFzcyBTUUxpdGVJREJUcmFuc2FjdGlvbjsKLQotY2xhc3MgVW5pcXVlSURCRGF0YWJh
c2VCYWNraW5nU3RvcmVTUUxpdGUgZmluYWwgOiBwdWJsaWMgVW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmUgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8VW5pcXVlSURCRGF0YWJhc2VCYWNr
aW5nU3RvcmU+IGNyZWF0ZShjb25zdCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIm
IGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpCi0gICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9yZVNR
TGl0ZShpZGVudGlmaWVyLCBkYXRhYmFzZURpcmVjdG9yeSkpOwotICAgIH0KLQotICAgIHZpcnR1
YWwgflVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlKCk7Ci0KLSAgICB2aXJ0dWFs
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJREJEYXRhYmFzZU1ldGFkYXRhPiBnZXRPckVzdGFi
bGlzaE1ldGFkYXRhKCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZXN0YWJsaXNoVHJh
bnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSURzLCBXZWJDb3JlOjpJbmRleGVkREI6OlRy
YW5zYWN0aW9uTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGJlZ2luVHJhbnNhY3Rp
b24oY29uc3QgSURCSWRlbnRpZmllciYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBjb21t
aXRUcmFuc2FjdGlvbihjb25zdCBJREJJZGVudGlmaWVyJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBib29sIHJlc2V0VHJhbnNhY3Rpb24oY29uc3QgSURCSWRlbnRpZmllciYpIG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgYm9vbCByb2xsYmFja1RyYW5zYWN0aW9uKGNvbnN0IElEQklkZW50aWZpZXIm
KSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBjaGFuZ2VEYXRhYmFzZVZlcnNpb24oY29u
c3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCB1aW50NjRfdCBuZXdWZXJz
aW9uKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoY29uc3Qg
SURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJREJP
YmplY3RTdG9yZU1ldGFkYXRhJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZU9i
amVjdFN0b3JlKGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50
NjRfdCBvYmplY3RTdG9yZUlEKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgY2xlYXJPYmpl
Y3RTdG9yZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0
X3Qgb2JqZWN0U3RvcmVJRCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4
KGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlELCBjb25zdCBXZWJDb3JlOjpJREJJbmRleE1ldGFkYXRhJikgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4KGNvbnN0IElEQklkZW50aWZpZXImIHRyYW5zYWN0
aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4SUQpIG92
ZXJyaWRlOwotCi0gICAgdmlydHVhbCBib29sIGdlbmVyYXRlS2V5TnVtYmVyKGNvbnN0IElEQklk
ZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgaW50NjRfdCBvYmplY3RTdG9yZUlELCBp
bnQ2NF90JiBnZW5lcmF0ZWRLZXkpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCB1cGRhdGVL
ZXlHZW5lcmF0b3JOdW1iZXIoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qga2V5TnVtYmVyLCBib29sIGNoZWNr
Q3VycmVudCkgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RT
dG9yZShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qg
b2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYsIGJvb2wmIGtleUV4aXN0
cykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29sIHB1dFJlY29yZChjb25zdCBJREJJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3Qg
V2ViQ29yZTo6SURCS2V5RGF0YSYsIGNvbnN0IHVpbnQ4X3QqIHZhbHVlQnVmZmVyLCBzaXplX3Qg
dmFsdWVTaXplKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhSZWNvcmQoY29u
c3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0
b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYga2V5VmFs
dWUsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmIGluZGV4S2V5KSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIGJvb2wgZ2V0SW5kZXhSZWNvcmQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rp
b25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgY29u
c3QgV2ViQ29yZTo6SURCS2V5UmFuZ2VEYXRhJiwgV2ViQ29yZTo6SW5kZXhlZERCOjpDdXJzb3JU
eXBlLCBXZWJDb3JlOjpJREJHZXRSZXN1bHQmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGVsZXRlUmFuZ2UoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBp
bnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleVJhbmdlRGF0YSYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBkZWxldGVSZWNvcmQoY29uc3QgSURCSWRlbnRpZmll
ciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdl
YkNvcmU6OklEQktleURhdGEmKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgYm9vbCBnZXRLZXlS
ZWNvcmRGcm9tT2JqZWN0U3RvcmUoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGNvbnN0IFdlYkNvcmU6OklEQktleSYsIFJl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgYm9vbCBnZXRLZXlSYW5nZVJlY29yZEZyb21PYmplY3RTdG9yZShjb25zdCBJREJJZGVudGlm
aWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgY29uc3Qg
V2ViQ29yZTo6SURCS2V5UmFuZ2UmLCBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYgcmVz
dWx0LCBSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiYgcmVzdWx0S2V5KSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIGJvb2wgY291bnQoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlm
aWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgY29uc3QgV2ViQ29y
ZTo6SURCS2V5UmFuZ2VEYXRhJiwgaW50NjRfdCYgY291bnQpIG92ZXJyaWRlOwotCi0gICAgdmly
dHVhbCBib29sIG9wZW5DdXJzb3IoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVu
dGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGludDY0X3QgaW5kZXhJRCwgV2ViQ29yZTo6
SW5kZXhlZERCOjpDdXJzb3JEaXJlY3Rpb24sIFdlYkNvcmU6OkluZGV4ZWREQjo6Q3Vyc29yVHlw
ZSwgV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSwgY29uc3QgV2ViQ29yZTo6
SURCS2V5UmFuZ2VEYXRhJiwgaW50NjRfdCYgY3Vyc29ySUQsIFdlYkNvcmU6OklEQktleURhdGEm
LCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgVmVjdG9yPHVpbnQ4X3Q+Jikgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCBib29sIGFkdmFuY2VDdXJzb3IoY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRl
bnRpZmllciwgdWludDY0X3QgY291bnQsIFdlYkNvcmU6OklEQktleURhdGEmLCBXZWJDb3JlOjpJ
REJLZXlEYXRhJiwgVmVjdG9yPHVpbnQ4X3Q+Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29s
IGl0ZXJhdGVDdXJzb3IoY29uc3QgSURCSWRlbnRpZmllciYgY3Vyc29ySWRlbnRpZmllciwgY29u
c3QgV2ViQ29yZTo6SURCS2V5RGF0YSYsIFdlYkNvcmU6OklEQktleURhdGEmLCBXZWJDb3JlOjpJ
REJLZXlEYXRhJiwgVmVjdG9yPHVpbnQ4X3Q+Jikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IG5vdGlmeUN1cnNvcnNPZkNoYW5nZXMoY29uc3QgSURCSWRlbnRpZmllciYgdHJhbnNhY3Rpb25J
ZGVudGlmaWVyLCBpbnQ2NF90IG9iamVjdFN0b3JlSUQpIG92ZXJyaWRlOwotCi0gICAgdm9pZCB1
bnJlZ2lzdGVyQ3Vyc29yKFNRTGl0ZUlEQkN1cnNvciopOwotCi1wcml2YXRlOgotICAgIFVuaXF1
ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlKGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnkpOwotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlPiBvcGVuU1FMaXRlRGF0YWJh
c2VBdFBhdGgoY29uc3QgU3RyaW5nJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklE
QkRhdGFiYXNlTWV0YWRhdGE+IGV4dHJhY3RFeGlzdGluZ01ldGFkYXRhKCk7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlTWV0YWRhdGE+IGNyZWF0ZUFuZFBvcHVsYXRl
SW5pdGlhbE1ldGFkYXRhKCk7Ci0KLSAgICBib29sIGVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCk7
Ci0KLSAgICBib29sIGRlbGV0ZVJlY29yZChTUUxpdGVJREJUcmFuc2FjdGlvbiYsIGludDY0X3Qg
b2JqZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYpOwotICAgIGJvb2wgdW5j
aGVja2VkUHV0SW5kZXhSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlELCBpbnQ2NF90IGluZGV4
SUQsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmIGtleVZhbHVlLCBjb25zdCBXZWJDb3JlOjpJ
REJLZXlEYXRhJiBpbmRleEtleSk7Ci0KLSAgICBpbnQgaWRiS2V5Q29sbGF0ZShpbnQgYUxlbmd0
aCwgY29uc3Qgdm9pZCogYSwgaW50IGJMZW5ndGgsIGNvbnN0IHZvaWQqIGIpOwotCi0gICAgTGVn
YWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyIG1faWRlbnRpZmllcjsKLSAgICBTdHJpbmcg
bV9hYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OlNRTGl0ZURhdGFiYXNlPiBtX3NxbGl0ZURCOwotCi0gICAgSGFzaE1hcDxJREJJZGVudGlm
aWVyLCBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCVHJhbnNhY3Rpb24+PiBtX3RyYW5zYWN0aW9u
czsKLSAgICBIYXNoTWFwPElEQklkZW50aWZpZXIsIFNRTGl0ZUlEQkN1cnNvcio+IG1fY3Vyc29y
czsKLQotICAgIFJlZlB0cjxKU0M6OlZNPiBtX3ZtOwotICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNH
bG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNF
X1BST0NFU1MpCi0jZW5kaWYgLy8gVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJj
ZS9XZWJLaXQyL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggNGU2YzIwYy4uYTIyYmM3NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC03Nyw3ICs3Nyw2IEBAIE1FU1NBR0VfUkVD
RUlWRVJTID0gXAogICAgIEN1c3RvbVByb3RvY29sTWFuYWdlciBcCiAgICAgQ3VzdG9tUHJvdG9j
b2xNYW5hZ2VyUHJveHkgXAogICAgIERhdGFiYXNlUHJvY2VzcyBcCi0gICAgRGF0YWJhc2VQcm9j
ZXNzSURCQ29ubmVjdGlvbiBcCiAgICAgRGF0YWJhc2VQcm9jZXNzUHJveHkgXAogICAgIERhdGFi
YXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbiBcCiAgICAgRG93bmxvYWRQcm94eSBcCkBAIC0xMTgs
NyArMTE3LDYgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgV2ViR2VvbG9jYXRpb25NYW5h
Z2VyUHJveHkgXAogICAgIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudCBcCiAgICAgV2ViSURCQ29u
bmVjdGlvblRvU2VydmVyIFwKLSAgICBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uIFwKICAgICBXZWJJ
Y29uRGF0YWJhc2UgXAogICAgIFdlYkljb25EYXRhYmFzZVByb3h5IFwKICAgICBXZWJJbnNwZWN0
b3IgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29w
aWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDcm9zc1RocmVhZENvcGllci5jcHAK
aW5kZXggMGNhMTJhZC4uMWExMGRhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNyb3NzVGhyZWFkQ29waWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
Q3Jvc3NUaHJlYWRDb3BpZXIuY3BwCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIklEQklkZW50aWZpZXIuaCIKLSNpbmNsdWRlICJM
ZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0lE
QktleURhdGEuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlY3VyaXR5T3JpZ2luRGF0YS5oPgogCkBA
IC0zNiwxNiArMzQsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciBDcm9zc1RocmVhZENv
cGllckJhc2U8ZmFsc2UsIGZhbHNlLCBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI+
Ojpjb3B5KGNvbnN0IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmll
cikKLXsKLSAgICByZXR1cm4gaWRlbnRpZmllci5pc29sYXRlZENvcHkoKTsKLX0KLQotSURCSWRl
bnRpZmllciBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBJREJJZGVudGlmaWVy
Pjo6Y29weShjb25zdCBJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIpCi17Ci0g
ICAgcmV0dXJuIHRyYW5zYWN0aW9uSWRlbnRpZmllci5pc29sYXRlZENvcHkoKTsKLX0KLQogVmVj
dG9yPGNoYXI+IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgZmFsc2UsIFZlY3RvcjxjaGFy
Pj46OmNvcHkoY29uc3QgVmVjdG9yPGNoYXI+JiB2ZWN0b3IpCiB7CiAgICAgVmVjdG9yPGNoYXI+
IHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDcm9zc1RocmVh
ZENvcGllci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNyb3NzVGhyZWFkQ29waWVyLmgK
aW5kZXggYWI2MjRlNi4uYjQxYmM5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVk
L1dlYkNyb3NzVGhyZWFkQ29waWVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNy
b3NzVGhyZWFkQ29waWVyLmgKQEAgLTM2LDkgKzM2LDYgQEAgc3RydWN0IFNlY3VyaXR5T3JpZ2lu
RGF0YTsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBJREJJZGVudGlmaWVyOwotY2xh
c3MgTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyOwotCiBlbnVtIGNsYXNzIExlZ2Fj
eVVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBlOwogfQogCkBAIC00OCwxNSArNDUsNiBAQCBj
bGFzcyBBU0NJSUxpdGVyYWw7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdGVtcGxhdGU8PiBz
dHJ1Y3QgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgV2ViS2l0OjpMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXI+IHsKLSAgICBzdGF0aWMgV2ViS2l0OjpMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIgY29weShjb25zdCBXZWJLaXQ6OkxlZ2FjeVVuaXF1
ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQ3Jvc3NU
aHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBmYWxzZSwgV2ViS2l0OjpJREJJZGVudGlmaWVyPiB7Ci0g
ICAgc3RhdGljIFdlYktpdDo6SURCSWRlbnRpZmllciBjb3B5KGNvbnN0IFdlYktpdDo6SURCSWRl
bnRpZmllciYpOwotfTsKLQotCiB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJh
c2U8ZmFsc2UsIGZhbHNlLCBXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25U
eXBlPiB7CiAgICAgc3RhdGljIFdlYktpdDo6TGVnYWN5VW5pcXVlSURCRGF0YWJhc2VTaHV0ZG93
blR5cGUgY29weShjb25zdCBXZWJLaXQ6OkxlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25U
eXBlJiB0eXBlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCBkNGEzZWZlLi5hMzExZWI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJLaXQyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NDgsMTIgKzg0
OCw2IEBACiAJCTUxMDUyMzc1MUM3M0QzOEYwMDc5OTNDQiAvKiBXZWJJREJDb25uZWN0aW9uVG9T
ZXJ2ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTEwNTIzNzIxQzczRDM3QjAwNzk5M0NCIC8qIFdlYklEQkNvbm5lY3Rp
b25Ub1NlcnZlck1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTUxMDUyMzc5MUM3M0RBNzcw
MDc5OTNDQiAvKiBXZWJJREJDb25uZWN0aW9uVG9DbGllbnRNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNTIzNzcxQzcz
REE3MDAwNzk5M0NCIC8qIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudE1lc3NhZ2VSZWNlaXZlci5j
cHAgKi87IH07CiAJCTUxMDUyMzdBMUM3M0RBNzcwMDc5OTNDQiAvKiBXZWJJREJDb25uZWN0aW9u
VG9DbGllbnRNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTEwNTIzNzgxQzczREE3MDAwNzk5M0NCIC8qIFdlYklEQkNvbm5lY3Rpb25Ub0Ns
aWVudE1lc3NhZ2VzLmggKi87IH07Ci0JCTUxMDUyMzdGMUM3NTQxRkYwMDc5OTNDQiAvKiBMZWdh
Y3lVbmlxdWVJREJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTA1MjM3QjFDNzU0MUYzMDA3OTkzQ0IgLyogTGVnYWN5VW5pcXVlSURC
RGF0YWJhc2UuY3BwICovOyB9OwotCQk1MTA1MjM4MDFDNzU0MUZGMDA3OTkzQ0IgLyogTGVnYWN5
VW5pcXVlSURCRGF0YWJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMDUyMzdDMUM3NTQxRjMwMDc5OTNDQiAvKiBMZWdhY3lVbmlxdWVJREJEYXRh
YmFzZS5oICovOyB9OwotCQk1MTA1MjM4MTFDNzU0MUZGMDA3OTkzQ0IgLyogTGVnYWN5VW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxMDUyMzdEMUM3NTQxRjMwMDc5OTNDQiAvKiBMZWdhY3lVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXIuY3BwICovOyB9OwotCQk1MTA1MjM4MjFDNzU0MUZGMDA3OTkz
Q0IgLyogTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTA1MjM3RTFDNzU0MUYzMDA3OTkzQ0Ig
LyogTGVnYWN5VW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyLmggKi87IH07Ci0JCTUxMDY0RDM1
MTg5NzgxQzQwMDRCMkZFQiAvKiBTUUxpdGVJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNjREMzMxODk3ODFDNDAwNEIyRkVCIC8q
IFNRTGl0ZUlEQkN1cnNvci5jcHAgKi87IH07Ci0JCTUxMDY0RDM2MTg5NzgxQzQwMDRCMkZFQiAv
KiBTUUxpdGVJREJDdXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMDY0RDM0MTg5NzgxQzQwMDRCMkZFQiAvKiBTUUxpdGVJREJDdXJzb3IuaCAq
LzsgfTsKIAkJNTEwNkQ3QzIxOEJEQkU3MzAwMEFCMTY2IC8qIENvbnRleHRNZW51Q29udGV4dERh
dGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEw
NkQ3QkYxOEJEQkU3MzAwMEFCMTY2IC8qIENvbnRleHRNZW51Q29udGV4dERhdGEuY3BwICovOyB9
OwogCQk1MTA2RDdDNDE4QkRCRTczMDAwQUIxNjYgLyogQ29udGV4dE1lbnVDb250ZXh0RGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNkQ3QzAx
OEJEQkU3MzAwMEFCMTY2IC8qIENvbnRleHRNZW51Q29udGV4dERhdGEuaCAqLzsgfTsKIAkJNTEw
QUZGQjkxNjU0MjA0ODAwMUJBMDVFIC8qIFdlYlJlc291cmNlTG9hZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEFGRkI3MTY1NDIwNDgwMDFC
QTA1RSAvKiBXZWJSZXNvdXJjZUxvYWRlci5jcHAgKi87IH07CkBAIC04NjYsOCArODYwLDYgQEAK
IAkJNTExQjI0QTcxMzJFMDk1NzAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZVByb3h5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFCMjRBNTEzMkUw
OTU3MDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlUHJveHkuaCAqLzsgfTsKIAkJNTExQjI0QUEx
MzJFMDk3MjAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFCMjRBODEzMkUwOTcyMDAwNjVBMEMgLyog
V2ViSWNvbkRhdGFiYXNlLmNwcCAqLzsgfTsKIAkJNTExQjI0QUIxMzJFMDk3MjAwMDY1QTBDIC8q
IFdlYkljb25EYXRhYmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTExQjI0QTkxMzJFMDk3MjAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZS5oICov
OyB9OwotCQk1MTFEODFGRjE4NUJCREVFMDAxQUVENTYgLyogU1FMaXRlSURCVHJhbnNhY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUQ4MUZE
MTg1QkJERUUwMDFBRUQ1NiAvKiBTUUxpdGVJREJUcmFuc2FjdGlvbi5oICovOyB9OwotCQk1MTFE
ODIwMTE4NUJDMjE3MDAxQUVENTYgLyogU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRDgyMDAxODVCQzIxNzAw
MUFFRDU2IC8qIFNRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcCAqLzsgfTsKIAkJNTExRjhBN0IxMzhC
NDYwOTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTGlicmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjhBNzcxMzhCNDYwOTAwQTk1RjQ0IC8qIFNl
Y0l0ZW1TaGltTGlicmFyeS5oICovOyB9OwogCQk1MTFGOEE4MTEzOEI0ODVEMDBBOTVGNDQgLyog
U2VjSXRlbVNoaW1MaWJyYXJ5Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTExRjhBNzgxMzhCNDYwOTAwQTk1RjQ0IC8qIFNlY0l0ZW1TaGltTGlicmFy
eS5tbSAqLzsgfTsKIAkJNTEyMTI3QzMxOTA4MjM5QTAwREFGMzVDIC8qIFdlYlBhc3RlYm9hcmRP
dmVycmlkZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTEyMTI3QzExOTA4MjM5QTAwREFGMzVDIC8qIFdlYlBhc3RlYm9hcmRPdmVycmlkZXMuY3Bw
ICovOyB9OwpAQCAtODc2LDggKzg2OCw2IEBACiAJCTUxMjE3NDYxMTY0QzIwRTMwMDM3QTVDMSAv
KiBTaGFyZWFibGVSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTEyMTc0NUYxNjRDMjBFMzAwMzdBNUMxIC8qIFNoYXJlYWJsZVJlc291cmNl
LmggKi87IH07CiAJCTUxMjNDRjFCMTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNH
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjND
RjE5MTMzRDI2MEEwMDU2RjgwMCAvKiBXS0ljb25EYXRhYmFzZUNHLmNwcCAqLzsgfTsKIAkJNTEy
M0NGMUMxMzNEMjYwQTAwNTZGODAwIC8qIFdLSWNvbkRhdGFiYXNlQ0cuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMjNDRjFBMTMzRDI2MEEwMDU2Rjgw
MCAvKiBXS0ljb25EYXRhYmFzZUNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJNTEyOTA5OTIxODNBQ0VBRjAwNTUyMkE2IC8qIFdlYklEQlNlcnZl
ckNvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEyOTA5OTAxODNBQ0VBRjAwNTUyMkE2IC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb24u
Y3BwICovOyB9OwotCQk1MTI5MDk5MzE4M0FDRUFGMDA1NTIyQTYgLyogV2ViSURCU2VydmVyQ29u
bmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTEyOTA5OTExODNBQ0VBRjAwNTUyMkE2IC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb24uaCAqLzsg
fTsKIAkJNTEyOTM1RDcxMjg4RDE5NDAwQTRCNjk1IC8qIFdlYkNvbnRleHRNZW51SXRlbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTI5MzVENTEy
ODhEMTk0MDBBNEI2OTUgLyogV2ViQ29udGV4dE1lbnVJdGVtLmNwcCAqLzsgfTsKIAkJNTEyOTM1
RDgxMjg4RDE5NDAwQTRCNjk1IC8qIFdlYkNvbnRleHRNZW51SXRlbS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyOTM1RDYxMjg4RDE5NDAwQTRCNjk1
IC8qIFdlYkNvbnRleHRNZW51SXRlbS5oICovOyB9OwogCQk1MTI5MzVFMzEyODhEOTc4MDBBNEI2
OTUgLyogSW5qZWN0ZWRCdW5kbGVQYWdlQ29udGV4dE1lbnVDbGllbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEyOTM1RTExMjg4RDk3ODAwQTRC
Njk1IC8qIEluamVjdGVkQnVuZGxlUGFnZUNvbnRleHRNZW51Q2xpZW50LmNwcCAqLzsgfTsKQEAg
LTkyNywxMyArOTE3LDkgQEAKIAkJNTE2MzE5OTIxNjI4OTgwQTAwRTIyRjAwIC8qIE5ldHdvcmtQ
cm9jZXNzUHJveHlNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTYzMTk5MTE2Mjg5ODBBMDBFMjJGMDAgLyogTmV0d29ya1Byb2Nlc3NQcm94eU1h
Yy5tbSAqLzsgfTsKIAkJNTE2MzE5OTQxNjI4OUE2MDAwRTIyRjAwIC8qIE5ldHdvcmtQcm9jZXNz
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxQUNDOTM0MTYyODA2NDgwMDM0MjU1MCAvKiBOZXR3b3JrUHJvY2Vzc01lc3Nh
Z2VSZWNlaXZlci5jcHAgKi87IH07CiAJCTUxNjMxOTk1MTYyODlBNjMwMEUyMkYwMCAvKiBOZXR3
b3JrUHJvY2Vzc01lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MUFDQzkzNTE2MjgwNjQ4MDAzNDI1NTAgLyogTmV0d29ya1Byb2Nlc3NNZXNz
YWdlcy5oICovOyB9OwotCQk1MTY1NEVGRDE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0
YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTE2NTRFRkIxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcCAqLzsgfTsKLQkJNTE2NTRFRkUxODRFRjMzRjAw
N0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY1NEVGQzE4NEVGMzNGMDA3
REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVTUUxpdGUuaCAqLzsgfTsKLQkJ
NTE2NTRGMDAxODRFRjM0QTAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3Jl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY1NEVG
RjE4NEVGMzRBMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaCAqLzsg
fTsKIAkJNTE2N0VFQTAxNzAzNzdCRjAwNzY4MUNBIC8qIE5ldHdvcmtEaXNrQ2FjaGVNb25pdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTY3RUU5
RTE3MDM3N0JGMDA3NjgxQ0EgLyogTmV0d29ya0Rpc2tDYWNoZU1vbml0b3IuaCAqLzsgfTsKIAkJ
NTE2N0VFQTExNzAzNzdCRjAwNzY4MUNBIC8qIE5ldHdvcmtEaXNrQ2FjaGVNb25pdG9yLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE2N0VFOUYxNzAz
NzdCRjAwNzY4MUNBIC8qIE5ldHdvcmtEaXNrQ2FjaGVNb25pdG9yLm1tICovOyB9OwogCQk1MTZB
NEE1RDEyMEEyQ0NEMDBDMDVCN0YgLyogQVBJRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxNkE0QTVCMTIwQTJDQ0QwMEMwNUI3RiAvKiBBUElF
cnJvci5oICovOyB9OwotCQk1MTc1MDk1QTE4OTcyNDk3MDA0MDhGQUMgLyogSURCSWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTE3NTA5
NTkxODk3MjQ5NzAwNDA4RkFDIC8qIElEQklkZW50aWZpZXIuaCAqLzsgfTsKIAkJNTE3OTU1Njcx
NjI4NzZDQjAwRkE0M0I2IC8qIE5ldHdvcmtQcm9jZXNzTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFBOEE2MTUxNjI3RjNGOTAwMEQ5MEU5IC8q
IE5ldHdvcmtQcm9jZXNzTWFjLm1tICovOyB9OwogCQk1MTc5NTU2ODE2Mjg3NkNGMDBGQTQzQjYg
LyogTmV0d29ya1Byb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTEwQ0M3REYxNjEzOEUyOTAwRDAzRUQzIC8qIE5ldHdvcmtQcm9jZXNzLmNw
cCAqLzsgfTsKIAkJNTE3OTU1NkExNjI4NzZGMzAwRkE0M0I2IC8qIE5ldHdvcmtQcm9jZXNzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBDQzdFMDE2
MTM4RTI5MDBEMDNFRDMgLyogTmV0d29ya1Byb2Nlc3MuaCAqLzsgfTsKQEAgLTk0NSw4ICs5MzEs
NiBAQAogCQk1MTdERDVCRjE4MERBN0QzMDA4MTY2MEIgLyogRGF0YWJhc2VQcm9jZXNzUHJveHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxN0RENUJE
MTgwREE3RDMwMDgxNjYwQiAvKiBEYXRhYmFzZVByb2Nlc3NQcm94eS5oICovOyB9OwogCQk1MTgz
NDU5MjEzNDUzMkU5MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxODM0NTkwMTM0NTMyRTgw
MDkyQjY5NiAvKiBXZWJJY29uRGF0YWJhc2VDbGllbnQuY3BwICovOyB9OwogCQk1MTgzNDU5MzEz
NDUzMkU5MDA5MkI2OTYgLyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTgzNDU5MTEzNDUzMkU4MDA5MkI2OTYg
LyogV2ViSWNvbkRhdGFiYXNlQ2xpZW50LmggKi87IH07Ci0JCTUxODM1M0RBMTg4NUJGOEMwMEQ5
RkU0NCAvKiBJREJTZXJpYWxpemF0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUxODM1M0Q4MTg4NUJGOEMwMEQ5RkU0NCAvKiBJREJTZXJpYWxp
emF0aW9uLmNwcCAqLzsgfTsKLQkJNTE4MzUzREIxODg1QkY4QzAwRDlGRTQ0IC8qIElEQlNlcmlh
bGl6YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUxODM1M0Q5MTg4NUJGOEMwMEQ5RkU0NCAvKiBJREJTZXJpYWxpemF0aW9uLmggKi87IH07CiAJ
CTUxODNEREVDMTYzMEJERkMwMDhCRTVDNyAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwNUIwRDQx
NjJGN0E3QTAwRTI3NzA5IC8qIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi87IH07CiAJ
CTUxODcxQjVCMTI3Q0I4OUQwMEY3NjIzMiAvKiBXZWJDb250ZXh0TWVudS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTg3MUI1OTEyN0NCODlEMDBG
NzYyMzIgLyogV2ViQ29udGV4dE1lbnUuY3BwICovOyB9OwogCQk1MTg3MUI1QzEyN0NCODlEMDBG
NzYyMzIgLyogV2ViQ29udGV4dE1lbnUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxODcxQjVBMTI3Q0I4OUQwMEY3NjIzMiAvKiBXZWJDb250ZXh0TWVu
dS5oICovOyB9OwpAQCAtOTc1LDggKzk1OSw2IEBACiAJCTUxQjE1QTg0MTM4NDNBMzkwMDMyMUFE
OCAvKiBFbnZpcm9ubWVudFV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUIxNUE4MjEzODQzQTM5MDAzMjFBRDggLyogRW52aXJvbm1l
bnRVdGlsaXRpZXMuY3BwICovOyB9OwogCQk1MUIxNUE4NTEzODQzQTM5MDAzMjFBRDggLyogRW52
aXJvbm1lbnRVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxQjE1QTgzMTM4NDNBMzkwMDMyMUFEOCAvKiBFbnZpcm9ubWVudFV0aWxpdGll
cy5oICovOyB9OwogCQk1MUJBMjQ0NjE4NThGNTVEMDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJlYWRD
b3BpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTFCQTI0NDUxODU4RjQxNTAwRUEyODExIC8qIFdlYkNyb3NzVGhyZWFkQ29waWVyLmNwcCAqLzsg
fTsKLQkJNTFDOTYxMTgxODNEMjk0NzAwRDIwMDJFIC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb25N
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTFDOTYxMTYxODNEMjk0NzAwRDIwMDJFIC8qIFdlYklEQlNlcnZlckNvbm5lY3Rp
b25NZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwotCQk1MUM5NjExOTE4M0QyOTQ3MDBEMjAwMkUg
LyogV2ViSURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUM5NjExNzE4M0QyOTQ3MDBEMjAwMkUgLyogV2Vi
SURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi87IH07CiAJCTUxQ0QxQzVEMUIzNDkzQUYw
MDE0MkNBNSAvKiBXS1NlY3VyaXR5T3JpZ2luUmVmLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQ0QxQzU5MUIzNDkzQTkwMDE0MkNBNSAvKiBXS1Nl
Y3VyaXR5T3JpZ2luUmVmLmNwcCAqLzsgfTsKIAkJNTFDRDFDNUUxQjM0OTNCNDAwMTQyQ0E1IC8q
IFdLU2VjdXJpdHlPcmlnaW5SZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUxQ0QxQzVBMUIzNDkzQTkwMDE0MkNBNSAvKiBXS1NlY3VyaXR5T3JpZ2lu
UmVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTFDRDFDNjUxQjM0QjlENDAwMTQyQ0E1IC8qIFdLU2VjdXJpdHlPcmlnaW4uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxQ0QxQzVGMUIzNEI5QzkwMDE0
MkNBNSAvKiBXS1NlY3VyaXR5T3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHVibGljLCApOyB9OyB9OwpAQCAtOTg2LDkgKzk2OCw2IEBACiAJCTUxRDAyRjZBMTMyRUM3Mzcw
MEJFQUE5NiAvKiBXZWJJY29uRGF0YWJhc2VNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFEMDJGNjcxMzJFQzczNzAwQkVBQTk2IC8qIFdl
Ykljb25EYXRhYmFzZU1lc3NhZ2VzLmggKi87IH07CiAJCTUxRDAyRjZCMTMyRUM3MzcwMEJFQUE5
NiAvKiBXZWJJY29uRGF0YWJhc2VQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQwMkY2ODEzMkVDNzM3MDBCRUFB
OTYgLyogV2ViSWNvbkRhdGFiYXNlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1
MUQwMkY2QzEzMkVDNzM3MDBCRUFBOTYgLyogV2ViSWNvbkRhdGFiYXNlUHJveHlNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFEMDJGNjkx
MzJFQzczNzAwQkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZVByb3h5TWVzc2FnZXMuaCAqLzsgfTsK
LQkJNTFEMEQ0MzExODNCMzQxMzAwOTcwNDFEIC8qIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFE
MEQ0MkUxODNCMzQxMzAwOTcwNDFEIC8qIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3Bw
ICovOyB9OwotCQk1MUQwRDQzNjE4M0IzNTNEMDA5NzA0MUQgLyogRGF0YWJhc2VQcm9jZXNzSURC
Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQwRDQzNDE4M0IzNTNEMDA5NzA0MUQgLyogRGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07Ci0JCTUxRDBENDM3
MTgzQjM1M0QwMDk3MDQxRCAvKiBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRDBENDM1
MTgzQjM1M0QwMDk3MDQxRCAvKiBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uTWVzc2FnZXMu
aCAqLzsgfTsKIAkJNTFEMTMwNTMxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXF1ZXN0RGF0
YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQx
MzA0RjEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlcXVlc3REYXRhLmNwcCAqLzsgfTsKIAkJ
NTFEMTMwNTQxMzgyRUFDMDAwMzUxRUREIC8qIFNlY0l0ZW1SZXF1ZXN0RGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFEMTMwNTAxMzgyRUFDMDAw
MzUxRUREIC8qIFNlY0l0ZW1SZXF1ZXN0RGF0YS5oICovOyB9OwogCQk1MUQxMzA1NTEzODJFQUMw
MDAzNTFFREQgLyogU2VjSXRlbVJlc3BvbnNlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUQxMzA1MTEzODJFQUMwMDAzNTFFREQgLyogU2Vj
SXRlbVJlc3BvbnNlRGF0YS5jcHAgKi87IH07CkBAIC05OTgsOCArOTc3LDYgQEAKIAkJNTFERDlG
MjkxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxREQ5
RjI3MTYzNjdEQTIwMDE1NzhFOSAvKiBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3Nh
Z2VzLmggKi87IH07CiAJCTUxRTM1MUNBMTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJVdGlsaXRpZXMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFMzUx
QzgxODBGMkNDQzAwRTUzQkU5IC8qIElEQlV0aWxpdGllcy5jcHAgKi87IH07CiAJCTUxRTM1MUNC
MTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRTM1MUM5MTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJV
dGlsaXRpZXMuaCAqLzsgfTsKLQkJNTFFMzUxRjUxODBGNUM3NTAwRTUzQkU5IC8qIFdlYklEQkZh
Y3RvcnlCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUxRTM1MUYxMTgwRjVDNzUwMEU1M0JFOSAvKiBXZWJJREJGYWN0b3J5QmFja2VuZC5j
cHAgKi87IH07Ci0JCTUxRTM1MUY2MTgwRjVDNzUwMEU1M0JFOSAvKiBXZWJJREJGYWN0b3J5QmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFF
MzUxRjIxODBGNUM3NTAwRTUzQkU5IC8qIFdlYklEQkZhY3RvcnlCYWNrZW5kLmggKi87IH07CiAJ
CTUxRTM1MUZGMTgwRjVEMEYwMEU1M0JFOSAvKiBEYXRhYmFzZVByb2Nlc3MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFMzUxRkExODBGNUQwQjAw
RTUzQkU5IC8qIERhdGFiYXNlUHJvY2Vzcy5jcHAgKi87IH07CiAJCTUxRTM1MjAwMTgwRjVEMEYw
MEU1M0JFOSAvKiBEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFFMzUxRkQxODBGNUQwQjAwRTUz
QkU5IC8qIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi87IH07CiAJCTUxRTM1
MjAyMTgwRjVEMUUwMEU1M0JFOSAvKiBEYXRhYmFzZVByb2Nlc3NNYWMubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUUzNTIwMTE4MEY1RDFFMDBFNTNC
RTkgLyogRGF0YWJhc2VQcm9jZXNzTWFjLm1tICovOyB9OwpAQCAtMjg0MiwxNSArMjgxOSw5IEBA
CiAJCTUxMDUyMzc2MUM3M0Q5RjYwMDc5OTNDQiAvKiBXZWJJREJDb25uZWN0aW9uVG9DbGllbnQu
bWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViSURCQ29ubmVjdGlvblRvQ2xp
ZW50Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTA1MjM3NzFD
NzNEQTcwMDA3OTkzQ0IgLyogV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50TWVzc2FnZVJlY2VpdmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYklEQkNvbm5lY3Rp
b25Ub0NsaWVudE1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUxMDUyMzc4MUM3M0RBNzAwMDc5OTNDQiAvKiBXZWJJREJDb25uZWN0aW9uVG9DbGllbnRN
ZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJJREJDb25uZWN0
aW9uVG9DbGllbnRNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTA1
MjM3QjFDNzU0MUYzMDA3OTkzQ0IgLyogTGVnYWN5VW5pcXVlSURCRGF0YWJhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGVnYWN5VW5pcXVlSURCRGF0YWJhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MTA1MjM3QzFDNzU0MUYzMDA3OTkz
Q0IgLyogTGVnYWN5VW5pcXVlSURCRGF0YWJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGVnYWN5VW5pcXVlSURCRGF0YWJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNTEwNTIzN0QxQzc1NDFGMzAwNzk5M0NCIC8qIExlZ2FjeVVuaXF1ZUlEQkRhdGFi
YXNlSWRlbnRpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBM
ZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MTA1MjM3RTFDNzU0MUYzMDA3OTkzQ0IgLyogTGVnYWN5VW5pcXVlSURCRGF0
YWJhc2VJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExlZ2Fj
eVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTA1QjBENDE2MkY3QTdBMDBFMjc3MDkgLyogTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbi5jcHA7IHBhdGggPSBOZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDVCMEQ1MTYyRjdBN0EwMEUyNzcw
OSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmg7IHBhdGggPSBOZXR3b3JrL05ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTA1
QjBGMzE2MzA4NzJFMDBFMjc3MDkgLyogTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbiAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBOZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk1MTA2NEQzMzE4OTc4MUM0MDA0QjJGRUIgLyogU1FMaXRlSURCQ3Vyc29yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNRTGl0ZUlEQkN1cnNvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxMDY0RDM0MTg5NzgxQzQwMDRCMkZF
QiAvKiBTUUxpdGVJREJDdXJzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1FMaXRlSURCQ3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMDZEN0JG
MThCREJFNzMwMDBBQjE2NiAvKiBDb250ZXh0TWVudUNvbnRleHREYXRhLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbnRleHRNZW51Q29udGV4dERhdGEuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTA2RDdDMDE4QkRCRTczMDAwQUIxNjYgLyog
Q29udGV4dE1lbnVDb250ZXh0RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb250ZXh0TWVudUNvbnRleHREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxMEFGRkI3MTY1NDIwNDgwMDFCQTA1RSAvKiBXZWJSZXNvdXJjZUxvYWRlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJSZXNvdXJjZUxvYWRlci5jcHA7IHBh
dGggPSBOZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTI4NjgsOCArMjgzOSw2IEBACiAJCTUxMUIyNEE1MTMyRTA5NTcwMDA2NUEwQyAv
KiBXZWJJY29uRGF0YWJhc2VQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXZWJJY29uRGF0YWJhc2VQcm94eS5oOyBwYXRoID0gSWNvbkRhdGFiYXNlL1dlYkljb25EYXRh
YmFzZVByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUIyNEE4MTMyRTA5
NzIwMDA2NUEwQyAvKiBXZWJJY29uRGF0YWJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2ViSWNvbkRhdGFiYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTExQjI0QTkxMzJFMDk3MjAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJJY29uRGF0YWJhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTExRDgxRkQxODVCQkRFRTAwMUFFRDU2IC8qIFNRTGl0
ZUlEQlRyYW5zYWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTGl0
ZUlEQlRyYW5zYWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxMUQ4MjAw
MTg1QkMyMTcwMDFBRUQ1NiAvKiBTUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxpdGVJREJUcmFuc2FjdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUY4QTc3MTM4QjQ2MDkwMEE5NUY0NCAvKiBTZWNJ
dGVtU2hpbUxpYnJhcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2VjSXRl
bVNoaW1MaWJyYXJ5Lmg7IHBhdGggPSAuLi8uLi9XZWJQcm9jZXNzL21hYy9TZWNJdGVtU2hpbUxp
YnJhcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRjhBNzgxMzhCNDYwOTAw
QTk1RjQ0IC8qIFNlY0l0ZW1TaGltTGlicmFyeS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IFNlY0l0ZW1TaGltTGlicmFyeS5tbTsgcGF0aCA9IC4uLy4uL1dlYlBy
b2Nlc3MvbWFjL1NlY0l0ZW1TaGltTGlicmFyeS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTEyMTI3QzExOTA4MjM5QTAwREFGMzVDIC8qIFdlYlBhc3RlYm9hcmRPdmVycmlkZXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViUGFzdGVib2FyZE92
ZXJyaWRlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yODc4LDggKzI4NDcs
NiBAQAogCQk1MTIxNzQ1RjE2NEMyMEUzMDAzN0E1QzEgLyogU2hhcmVhYmxlUmVzb3VyY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVhYmxlUmVzb3VyY2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyM0NGMTkxMzNEMjYwQTAwNTZGODAwIC8qIFdL
SWNvbkRhdGFiYXNlQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
V0tJY29uRGF0YWJhc2VDRy5jcHA7IHBhdGggPSBjZy9XS0ljb25EYXRhYmFzZUNHLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTEyM0NGMUExMzNEMjYwQTAwNTZGODAwIC8qIFdL
SWNvbkRhdGFiYXNlQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tJY29u
RGF0YWJhc2VDRy5oOyBwYXRoID0gY2cvV0tJY29uRGF0YWJhc2VDRy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MTI5MDk5MDE4M0FDRUFGMDA1NTIyQTYgLyogV2ViSURCU2VydmVy
Q29ubmVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJJ
REJTZXJ2ZXJDb25uZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTEy
OTA5OTExODNBQ0VBRjAwNTUyMkE2IC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViSURCU2VydmVyQ29ubmVjdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTI5MzVENTEyODhEMTk0MDBBNEI2OTUgLyogV2Vi
Q29udGV4dE1lbnVJdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdlYkNvbnRleHRNZW51SXRlbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
MjkzNUQ2MTI4OEQxOTQwMEE0QjY5NSAvKiBXZWJDb250ZXh0TWVudUl0ZW0uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29udGV4dE1lbnVJdGVtLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUxMjkzNUUxMTI4OEQ5NzgwMEE0QjY5NSAvKiBJbmplY3RlZEJ1
bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbmplY3RlZEJ1bmRsZVBhZ2VDb250ZXh0TWVudUNsaWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTI4LDEzICsyODk1LDkgQEAKIAkJNTE2MzExODYx
ODU4NDQ2NjAwNTM0NjQ3IC8qIFdlYkNyb3NzVGhyZWFkQ29waWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNyb3NzVGhyZWFkQ29waWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTUxNjMxOTkxMTYyODk4MEEwMEUyMkYwMCAvKiBOZXR3b3JrUHJvY2Vz
c1Byb3h5TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTmV0
d29ya1Byb2Nlc3NQcm94eU1hYy5tbTsgcGF0aCA9IG1hYy9OZXR3b3JrUHJvY2Vzc1Byb3h5TWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTY0QzA5NDFCMDVCNzU3MDA0RjEw
MkEgLyogQ2hpbGRQcm9jZXNzLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENo
aWxkUHJvY2Vzcy5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE2
NTRFRkIxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FM
aXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNTE2NTRFRkMxODRFRjMzRjAwN0RDODM3IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0
b3JlU1FMaXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaXF1ZUlEQkRh
dGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTUxNjU0RUZGMTg0RUYzNEEwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdTdG9y
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmlxdWVJREJEYXRhYmFzZUJh
Y2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTY3RUU5RTE3MDM3
N0JGMDA3NjgxQ0EgLyogTmV0d29ya0Rpc2tDYWNoZU1vbml0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gTmV0d29ya0Rpc2tDYWNoZU1vbml0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE2N0VFOUYxNzAzNzdCRjAwNzY4MUNBIC8qIE5ldHdvcmtEaXNr
Q2FjaGVNb25pdG9yLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
TmV0d29ya0Rpc2tDYWNoZU1vbml0b3IubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUxNkE0QTVCMTIwQTJDQ0QwMEMwNUI3RiAvKiBBUElFcnJvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBUElFcnJvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1MTc1MDk1OTE4OTcyNDk3MDA0MDhGQUMgLyogSURCSWRlbnRpZmllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJREJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxN0EzM0IzMTMwQjMwOEMwMEY4MENCNSAvKiBXS0FwcGxpY2F0aW9uQ2Fj
aGVNYW5hZ2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdLQXBw
bGljYXRpb25DYWNoZU1hbmFnZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MTdBMzNCNDEzMEIzMDhDMDBGODBDQjUgLyogV0tBcHBsaWNhdGlvbkNhY2hlTWFuYWdlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS0FwcGxpY2F0aW9uQ2FjaGVNYW5hZ2Vy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxN0NGMEUxMTYzQTQ4NkMwMEMyOTUw
RSAvKiBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uTWVz
c2FnZVJlY2VpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5NDMsOCAr
MjkwNiw2IEBACiAJCTUxN0RENUJEMTgwREE3RDMwMDgxNjYwQiAvKiBEYXRhYmFzZVByb2Nlc3NQ
cm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBEYXRhYmFzZVByb2Nlc3NQ
cm94eS5oOyBwYXRoID0gRGF0YWJhc2VzL0RhdGFiYXNlUHJvY2Vzc1Byb3h5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODM0NTkwMTM0NTMyRTgwMDkyQjY5NiAvKiBXZWJJY29u
RGF0YWJhc2VDbGllbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViSWNvbkRhdGFiYXNlQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTE4MzQ1OTExMzQ1MzJFODAwOTJCNjk2IC8qIFdlYkljb25EYXRhYmFzZUNsaWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJJY29uRGF0YWJhc2VDbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTE4MzUzRDgxODg1QkY4QzAwRDlGRTQ0IC8qIElE
QlNlcmlhbGl6YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SURCU2VyaWFsaXphdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxODM1
M0Q5MTg4NUJGOEMwMEQ5RkU0NCAvKiBJREJTZXJpYWxpemF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IElEQlNlcmlhbGl6YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTE4M0IzOTMxMzc5Rjg1QzAwRTg3NTRFIC8qIFNoaW0ueGNjb25maWcgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gU2hpbS54Y2NvbmZpZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTE4NEJDNEExMzJFOTA3QTAwNkI5RTI4IC8qIFdlYkljb25EYXRh
YmFzZS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJJY29uRGF0YWJhc2Uu
bWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxODcxQjU5MTI3Q0I4
OUQwMEY3NjIzMiAvKiBXZWJDb250ZXh0TWVudS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXZWJDb250ZXh0TWVudS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0yOTgyLDkgKzI5NDMsNiBAQAogCQk1MUIxNUE4MjEzODQzQTM5MDAzMjFBRDggLyog
RW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gRW52aXJvbm1lbnRVdGlsaXRpZXMuY3BwOyBwYXRoID0gdW5peC9FbnZpcm9ubWVudFV0
aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxQjE1QTgzMTM4NDNB
MzkwMDMyMUFEOCAvKiBFbnZpcm9ubWVudFV0aWxpdGllcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBFbnZpcm9ubWVudFV0aWxpdGllcy5oOyBwYXRoID0gdW5peC9FbnZpcm9u
bWVudFV0aWxpdGllcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUJBMjQ0NTE4
NThGNDE1MDBFQTI4MTEgLyogV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV2ViQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1MUM5NjExNTE4M0M5NUZGMDBEMjAwMkUgLyogV2ViSURCU2VydmVyQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1MUM5NjExNjE4M0QyOTQ3MDBEMjAwMkUgLyogV2Vi
SURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTFDOTYxMTcxODNEMjk0NzAwRDIw
MDJFIC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb25NZXNzYWdlcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVzc2FnZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDRDFDNTkxQjM0OTNBOTAwMTQyQ0E1IC8qIFdLU2Vj
dXJpdHlPcmlnaW5SZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V0tTZWN1cml0eU9yaWdpblJlZi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
Q0QxQzVBMUIzNDkzQTkwMDE0MkNBNSAvKiBXS1NlY3VyaXR5T3JpZ2luUmVmLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLU2VjdXJpdHlPcmlnaW5SZWYuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTFDRDFDNUYxQjM0QjlDOTAwMTQyQ0E1IC8qIFdLU2VjdXJp
dHlPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tTZWN1cml0eU9y
aWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjk5NSwxMSArMjk1Myw2IEBA
CiAJCTUxRDAyRjY3MTMyRUM3MzcwMEJFQUE5NiAvKiBXZWJJY29uRGF0YWJhc2VNZXNzYWdlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJJY29uRGF0YWJhc2VNZXNzYWdl
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQwMkY2ODEzMkVDNzM3MDBCRUFB
OTYgLyogV2ViSWNvbkRhdGFiYXNlUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViSWNvbkRhdGFiYXNlUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUQwMkY2OTEzMkVDNzM3
MDBCRUFBOTYgLyogV2ViSWNvbkRhdGFiYXNlUHJveHlNZXNzYWdlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJJY29uRGF0YWJhc2VQcm94eU1lc3NhZ2VzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDBENDJFMTgzQjM0MTMwMDk3MDQxRCAvKiBEYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MUQwRDQyRjE4M0IzNDEzMDA5NzA0MUQgLyogRGF0YWJhc2VQcm9j
ZXNzSURCQ29ubmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTUxRDBENDMwMTgzQjM0MTMwMDk3MDQxRCAvKiBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9u
Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IERhdGFiYXNlUHJvY2Vzc0lEQkNv
bm5lY3Rpb24ubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRDBE
NDM0MTgzQjM1M0QwMDk3MDQxRCAvKiBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFi
YXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1MUQwRDQzNTE4M0IzNTNEMDA5NzA0MUQgLyogRGF0YWJhc2VQcm9j
ZXNzSURCQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb25NZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1MUQxMzA0RjEzODJFQUMwMDAzNTFFREQgLyogU2VjSXRlbVJlcXVl
c3REYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlY0l0ZW1S
ZXF1ZXN0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRDEzMDUwMTM4
MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVxdWVzdERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2VjSXRlbVJlcXVlc3REYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxRDEzMDUxMTM4MkVBQzAwMDM1MUVERCAvKiBTZWNJdGVtUmVzcG9uc2VEYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlY0l0ZW1SZXNwb25z
ZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzAwOSw4ICsyOTYyLDYg
QEAKIAkJNTFERDlGMjcxNjM2N0RBMjAwMTU3OEU5IC8qIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzTWVzc2FnZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MUUzNTFDODE4MEYyQ0NDMDBFNTNCRTkgLyogSURCVXRpbGl0aWVzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElEQlV0aWxpdGllcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRTM1MUM5MTgwRjJDQ0MwMEU1M0JFOSAvKiBJREJV
dGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSURCVXRpbGl0aWVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTUxRTM1MUYxMTgwRjVDNzUwMEU1M0JF
OSAvKiBXZWJJREJGYWN0b3J5QmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXZWJJREJGYWN0b3J5QmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTUxRTM1MUYyMTgwRjVDNzUwMEU1M0JFOSAvKiBXZWJJREJGYWN0b3J5QmFja2Vu
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJJREJGYWN0b3J5QmFja2Vu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUUzNTFGQTE4MEY1RDBCMDBFNTNC
RTkgLyogRGF0YWJhc2VQcm9jZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGFiYXNlUHJv
Y2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRTM1MUZCMTgwRjVEMEIw
MEU1M0JFOSAvKiBEYXRhYmFzZVByb2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VQcm9j
ZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRTM1MUZDMTgwRjVEMEIwMEU1
M0JFOSAvKiBEYXRhYmFzZVByb2Nlc3MubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRGF0YWJhc2VQcm9jZXNz
Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTI4MywxMSArNTIz
NCw2IEBACiAJCQkJNTE0MTI5OTExQzY0MjgxMDAwNTlFNzE0IC8qIFdlYklEQkNvbm5lY3Rpb25U
b1NlcnZlci5jcHAgKi8sCiAJCQkJNTE0MTI5OTIxQzY0MjgxMDAwNTlFNzE0IC8qIFdlYklEQkNv
bm5lY3Rpb25Ub1NlcnZlci5oICovLAogCQkJCTUxMDUyMzcxMUM3M0QyMkIwMDc5OTNDQiAvKiBX
ZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW4gKi8sCi0JCQkJNTFFMzUxRjExODBG
NUM3NTAwRTUzQkU5IC8qIFdlYklEQkZhY3RvcnlCYWNrZW5kLmNwcCAqLywKLQkJCQk1MUUzNTFG
MjE4MEY1Qzc1MDBFNTNCRTkgLyogV2ViSURCRmFjdG9yeUJhY2tlbmQuaCAqLywKLQkJCQk1MTI5
MDk5MDE4M0FDRUFGMDA1NTIyQTYgLyogV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAgKi8sCi0J
CQkJNTEyOTA5OTExODNBQ0VBRjAwNTUyMkE2IC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb24uaCAq
LywKLQkJCQk1MUM5NjExNTE4M0M5NUZGMDBEMjAwMkUgLyogV2ViSURCU2VydmVyQ29ubmVjdGlv
bi5tZXNzYWdlcy5pbiAqLywKIAkJCSk7CiAJCQlwYXRoID0gSW5kZXhlZERCOwogCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTUzMzYsMTkgKzUyODIsNiBAQAogCQkJbmFtZSA9IG1hYzsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTUxNjU0RUYwMTg0RUYyNDEwMDdE
QzgzNyAvKiBzcWxpdGUgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0g
KAotCQkJCTUxMDY0RDMzMTg5NzgxQzQwMDRCMkZFQiAvKiBTUUxpdGVJREJDdXJzb3IuY3BwICov
LAotCQkJCTUxMDY0RDM0MTg5NzgxQzQwMDRCMkZFQiAvKiBTUUxpdGVJREJDdXJzb3IuaCAqLywK
LQkJCQk1MTFEODIwMDE4NUJDMjE3MDAxQUVENTYgLyogU1FMaXRlSURCVHJhbnNhY3Rpb24uY3Bw
ICovLAotCQkJCTUxMUQ4MUZEMTg1QkJERUUwMDFBRUQ1NiAvKiBTUUxpdGVJREJUcmFuc2FjdGlv
bi5oICovLAotCQkJCTUxNjU0RUZCMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFz
ZUJhY2tpbmdTdG9yZVNRTGl0ZS5jcHAgKi8sCi0JCQkJNTE2NTRFRkMxODRFRjMzRjAwN0RDODM3
IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlU1FMaXRlLmggKi8sCi0JCQkpOwotCQkJ
cGF0aCA9IHNxbGl0ZTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCTUxN0RE
NUJCMTgwREE3QzQwMDgxNjYwQiAvKiBEYXRhYmFzZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNTQyMSwxOCArNTM1NCw2IEBACiAJCTUxRTM1MUY5MTgw
RjVDRjYwMEU1M0JFOSAvKiBJbmRleGVkREIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAotCQkJCTUxNjU0RUYwMTg0RUYyNDEwMDdEQzgzNyAvKiBzcWxpdGUgKi8s
Ci0JCQkJNTFEMEQ0MkUxODNCMzQxMzAwOTcwNDFEIC8qIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5l
Y3Rpb24uY3BwICovLAotCQkJCTUxRDBENDJGMTgzQjM0MTMwMDk3MDQxRCAvKiBEYXRhYmFzZVBy
b2Nlc3NJREJDb25uZWN0aW9uLmggKi8sCi0JCQkJNTFEMEQ0MzAxODNCMzQxMzAwOTcwNDFEIC8q
IERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24ubWVzc2FnZXMuaW4gKi8sCi0JCQkJNTE3NTA5
NTkxODk3MjQ5NzAwNDA4RkFDIC8qIElEQklkZW50aWZpZXIuaCAqLywKLQkJCQk1MTgzNTNEODE4
ODVCRjhDMDBEOUZFNDQgLyogSURCU2VyaWFsaXphdGlvbi5jcHAgKi8sCi0JCQkJNTE4MzUzRDkx
ODg1QkY4QzAwRDlGRTQ0IC8qIElEQlNlcmlhbGl6YXRpb24uaCAqLywKLQkJCQk1MTA1MjM3QjFD
NzU0MUYzMDA3OTkzQ0IgLyogTGVnYWN5VW5pcXVlSURCRGF0YWJhc2UuY3BwICovLAotCQkJCTUx
MDUyMzdDMUM3NTQxRjMwMDc5OTNDQiAvKiBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZS5oICovLAot
CQkJCTUxMDUyMzdEMUM3NTQxRjMwMDc5OTNDQiAvKiBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZUlk
ZW50aWZpZXIuY3BwICovLAotCQkJCTUxMDUyMzdFMUM3NTQxRjMwMDc5OTNDQiAvKiBMZWdhY3lV
bmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIuaCAqLywKLQkJCQk1MTY1NEVGRjE4NEVGMzRBMDA3
REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk1MTA1MjM2
RDFDNzM5M0U5MDA3OTkzQ0IgLyogV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50LmNwcCAqLywKIAkJ
CQk1MTA1MjM2RTFDNzM5M0U5MDA3OTkzQ0IgLyogV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50Lmgg
Ki8sCiAJCQkJNTEwNTIzNzYxQzczRDlGNjAwNzk5M0NCIC8qIFdlYklEQkNvbm5lY3Rpb25Ub0Ns
aWVudC5tZXNzYWdlcy5pbiAqLywKQEAgLTY4MzMsOCArNjc1NCw2IEBACiAJCQkJMjk4NEY1ODcx
NjRCQTA5NTAwNEJDMEM2IC8qIEN1c3RvbVByb3RvY29sTWFuYWdlck1lc3NhZ2VzLmggKi8sCiAJ
CQkJMjk4NEY1N0ExNjRCOTE1RjAwNEJDMEM2IC8qIEN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQkyOTg0RjU3QjE2NEI5MTVGMDA0QkMwQzYgLyog
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5oICovLAotCQkJCTUxRDBENDM0MTgz
QjM1M0QwMDk3MDQxRCAvKiBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uTWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLywKLQkJCQk1MUQwRDQzNTE4M0IzNTNEMDA5NzA0MUQgLyogRGF0YWJhc2VQcm9j
ZXNzSURCQ29ubmVjdGlvbk1lc3NhZ2VzLmggKi8sCiAJCQkJNTEyQTk3NUUxODBFMDMxNjAwMzlB
MTQ5IC8qIERhdGFiYXNlUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJNTEyQTk3
NUYxODBFMDMxNjAwMzlBMTQ5IC8qIERhdGFiYXNlUHJvY2Vzc01lc3NhZ2VzLmggKi8sCiAJCQkJ
NTEyQTk3NjcxODBFMDlCODAwMzlBMTQ5IC8qIERhdGFiYXNlUHJvY2Vzc1Byb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCAqLywKQEAgLTY5MjUsOCArNjg0NCw2IEBACiAJCQkJNTEwNTIzNzgxQzczREE3
MDAwNzk5M0NCIC8qIFdlYklEQkNvbm5lY3Rpb25Ub0NsaWVudE1lc3NhZ2VzLmggKi8sCiAJCQkJ
NTEwNTIzNzIxQzczRDM3QjAwNzk5M0NCIC8qIFdlYklEQkNvbm5lY3Rpb25Ub1NlcnZlck1lc3Nh
Z2VSZWNlaXZlci5jcHAgKi8sCiAJCQkJNTEwNTIzNzMxQzczRDM3QjAwNzk5M0NCIC8qIFdlYklE
QkNvbm5lY3Rpb25Ub1NlcnZlck1lc3NhZ2VzLmggKi8sCi0JCQkJNTFDOTYxMTYxODNEMjk0NzAw
RDIwMDJFIC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwICovLAot
CQkJCTUxQzk2MTE3MTgzRDI5NDcwMEQyMDAyRSAvKiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uTWVz
c2FnZXMuaCAqLywKIAkJCQkxQzhFMkEzMTEyNzc4NTI0MDBCQzdCRDAgLyogV2ViSW5zcGVjdG9y
TWVzc2FnZVJlY2VpdmVyLmNwcCAqLywKIAkJCQkxQzhFMkEzMjEyNzc4NTI0MDBCQzdCRDAgLyog
V2ViSW5zcGVjdG9yTWVzc2FnZXMuaCAqLywKIAkJCQkxQ0E4Qjk0MzEyN0M4ODJBMDA1NzZDMkIg
LyogV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovLApAQCAtNzMyMyw3ICs3
MjQwLDYgQEAKIAkJCQkyOUFEMzA5MzE2NEI0QzVEMDA3MkRFQTkgLyogQ3VzdG9tUHJvdG9jb2xN
YW5hZ2VyUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTI5ODRGNTdEMTY0QjkxNUYwMDRCQzBD
NiAvKiBDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTVFNzcyQzE4NDAwOEI5MDAwNzIwM0YgLyogRGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25Q
YXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MUQwRDQzNzE4M0IzNTNEMDA5NzA0MUQg
LyogRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbk1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MTJBOTc2MTE4MEUwMzFEMDAzOUExNDkgLyogRGF0YWJhc2VQcm9jZXNzTWVzc2FnZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxN0RENUJGMTgwREE3RDMwMDgxNjYwQiAvKiBEYXRhYmFz
ZVByb2Nlc3NQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEyQTk3NkExODBFMDlCODAwMzlB
MTQ5IC8qIERhdGFiYXNlUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLApAQCAt
NzM1OSw4ICs3Mjc1LDYgQEAKIAkJCQlDMENFNzJBRDEyNDdFNzhEMDBCQzBFQzQgLyogSGFuZGxl
TWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDNzVBMUIxQjMzNjgyNzAwNTY3NDVCIC8q
IEhhbmdEZXRlY3Rpb25EaXNhYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdGOTBERTMxMzc2
NTYwRTAwNTFDRjY4IC8qIEhUVFBDb29raWVBY2NlcHRQb2xpY3kuaCBpbiBIZWFkZXJzICovLAot
CQkJCTUxNzUwOTVBMTg5NzI0OTcwMDQwOEZBQyAvKiBJREJJZGVudGlmaWVyLmggaW4gSGVhZGVy
cyAqLywKLQkJCQk1MTgzNTNEQjE4ODVCRjhDMDBEOUZFNDQgLyogSURCU2VyaWFsaXphdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTFFMzUxQ0IxODBGMkNDQzAwRTUzQkU5IC8qIElEQlV0aWxp
dGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjZCMjUxMkM5M0U3QTAwOEY5QzM1IC8qIElt
YWdlT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUExRUM2OUUxODcyMDkyMTAwQjk1MUYw
IC8qIEltcG9ydGFuY2VBc3NlcnRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNzM3NiwxMCArNzI5
MCw4IEBACiAJCQkJNTEyOTM1RTQxMjg4RDk3ODAwQTRCNjk1IC8qIEluamVjdGVkQnVuZGxlUGFn
ZUNvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVFNTNFMzExRjhDRkMw
MDBDQ0JFRTQgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRWRpdG9yQ2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE0RTEwQTEyMEI5MDVFMDA4MjZDMEMgLyogSW5qZWN0ZWRCdW5kbGVQYWdlRm9y
bUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTEwNTIzODIxQzc1NDFGRjAwNzk5M0NCIC8q
IExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0Q1QzY2QTExMzRCOUQzODAwNEZFMkE4IC8qIEluamVjdGVkQnVuZGxlUGFnZUZ1bGxTY3JlZW5D
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQThDNkE5MTFFM0JBNUYwMDgxMkZCNyAvKiBJ
bmplY3RlZEJ1bmRsZVBhZ2VMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxMDUy
MzgwMUM3NTQxRkYwMDc5OTNDQiAvKiBMZWdhY3lVbmlxdWVJREJEYXRhYmFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM4MTQ3QTkxMkY2NENEQTAwN0IyQzMyIC8qIEluamVjdGVkQnVuZGxlUGFn
ZVBvbGljeUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNBOEM2QjAxMUUzQzA4NzAwODEy
RkI3IC8qIEluamVjdGVkQnVuZGxlUGFnZVVJQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5
OTU1QTZGNzFDNzk4NkU1MDBFQjZBOTMgLyogSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmggaW4g
SGVhZGVycyAqLywKQEAgLTc1NTYsOCArNzQ2OCw2IEBACiAJCQkJMUEyNEJFRDUxMjA4OTREMTAw
RkJCMDU5IC8qIFNoYXJlZE1lbW9yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBRjA2RDYxOEJE
MUE0NzAwODFDRUIxIC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTJERTY5NDNFMThCRDJBNjgwMDVDMTVFNSAvKiBTbWFydE1hZ25pZmljYXRpb25D
b250cm9sbGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxMDY0RDM2MTg5NzgxQzQw
MDRCMkZFQiAvKiBTUUxpdGVJREJDdXJzb3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTUxMUQ4MUZG
MTg1QkJERUUwMDFBRUQ1NiAvKiBTUUxpdGVJREJUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTI3MkIyOEIxNDA2OTg1RDAwOTZBNUQwIC8qIFN0YXRpc3RpY3NEYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTRCREVEMzE2Qzk4RUREMDBFNEUyNUUgLyogU3RhdGlzdGljc1JlcXVl
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRDMzMDZGMTZCMUQ5OTEwMDRGNjBFNyAvKiBTdG9y
YWdlQXJlYUltcGwuaCBpbiBIZWFkZXJzICovLApAQCAtNzU3Niw4ICs3NDg2LDYgQEAKIAkJCQkx
QUYwNUQ4NzE0Njg4MzQ4MDA4QjFFODEgLyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWFQ
cm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFGRTQzNjYxOEI2QzA4MTAwOUM3QTQ4IC8qIFVJ
RGVsZWdhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFRTRBRTJCMUE1RENGNDMwMDAyRjQ5QiAv
KiBVSUtpdFNQSS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTE2NTRGMDAxODRFRjM0QTAwN0RDODM3
IC8qIFVuaXF1ZUlEQkRhdGFiYXNlQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLywKLQkJCQk1
MTY1NEVGRTE4NEVGMzNGMDA3REM4MzcgLyogVW5pcXVlSURCRGF0YWJhc2VCYWNraW5nU3RvcmVT
UUxpdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNjQyNDVFMTJERTI5QTEwMENBQUUyQyAvKiBV
cGRhdGVJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUMxMzM2ODE4NTY1QjU3MDBGM0VDMDUg
LyogVXNlckRhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTRBM0NDMThCMTlCMDY0MEYwMEQxNEFF
RiAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXJQcm94eS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03NjY0LDkgKzc1NzIsNiBAQAogCQkJCTUxRDAyRjZBMTMyRUM3MzcwMEJFQUE5NiAv
KiBXZWJJY29uRGF0YWJhc2VNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTExQjI0QTcx
MzJFMDk1NzAwMDY1QTBDIC8qIFdlYkljb25EYXRhYmFzZVByb3h5LmggaW4gSGVhZGVycyAqLywK
IAkJCQk1MUQwMkY2QzEzMkVDNzM3MDBCRUFBOTYgLyogV2ViSWNvbkRhdGFiYXNlUHJveHlNZXNz
YWdlcy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFFMzUxRjYxODBGNUM3NTAwRTUzQkU5IC8qIFdl
YklEQkZhY3RvcnlCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKLQkJCQk1MTI5MDk5MzE4M0FDRUFG
MDA1NTIyQTYgLyogV2ViSURCU2VydmVyQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NTFDOTYxMTkxODNEMjk0NzAwRDIwMDJFIC8qIFdlYklEQlNlcnZlckNvbm5lY3Rpb25NZXNzYWdl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNDRjZBQkQxMkM5MUVGOTAwOEY5QzM1IC8qIFdlYklt
YWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzhFMjgyMDEyNzVEMTU0MDBCQzdCRDAgLyogV2Vi
SW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAzMkQ4MjEwRjQzNzhEMDA1OEMxNUEg
LyogV2ViSW5zcGVjdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTg3NjcsOSArODY3Miw3
IEBACiAJCQkJMjk4NEY1N0MxNjRCOTE1RjAwNEJDMEM2IC8qIEN1c3RvbVByb3RvY29sTWFuYWdl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxRTM1MUZGMTgw
RjVEMEYwMEU1M0JFOSAvKiBEYXRhYmFzZVByb2Nlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NTE1RTc3MkIxODQwMDhCOTAwMDcyMDNGIC8qIERhdGFiYXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUQwRDQzMTE4M0IzNDEzMDA5NzA0MUQgLyog
RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1QzE0
MjcwMzFDMjNGODRDMDBENDExODMgLyogRG93bmxvYWRBdXRoZW50aWNhdGlvbkNsaWVudC5jcHAg
aW4gU291cmNlcyAqLywKLQkJCQk1MUQwRDQzNjE4M0IzNTNEMDA5NzA0MUQgLyogRGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMTE1QzcxNDE5MEY4OUU0MDBFQ0M1MTYgLyogRGF0YWJhc2VQcm9jZXNzSU9TLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNTFFMzUyMDIxODBGNUQxRTAwRTUzQkU5IC8qIERhdGFiYXNlUHJvY2Vz
c01hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTUxMkE5NzYwMTgwRTAzMUQwMDM5QTE0OSAvKiBE
YXRhYmFzZVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04ODA0
LDcgKzg3MDcsNiBAQAogCQkJCUJDMDZGNDNCMTJEQkNDRkIwMDJENzhERSAvKiBHZW9sb2NhdGlv
blBlcm1pc3Npb25SZXF1ZXN0UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkRBMDQ5Qjcx
ODBDQ0QwQTAwQUFGQTlFIC8qIEdyYXBoaWNzTGF5ZXJDQVJlbW90ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxQUM3NUExRTFCMzM2OTVFMDA1Njc0NUIgLyogSGFuZ0RldGVjdGlvbkRpc2FibGVy
TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTE4MzUzREExODg1QkY4QzAwRDlGRTQ0IC8qIElE
QlNlcmlhbGl6YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFFMzUxQ0ExODBGMkNDQzAw
RTUzQkU5IC8qIElEQlV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzIwNEVFMjEx
QzgzRTk4MDA4RjMzNzUgLyogSW5qZWN0ZWRCdW5kbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTM1RUVCQTExMjc3NjFDQzAwMzMyMkI4IC8qIEluamVjdGVkQnVuZGxlQmFja0ZvcndhcmRMaXN0
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODg1MCw3ICs4NzUyLDYgQEAKIAkJCQlDMEUzQUE3QjEy
MDlFODM1MDBBNDlEMDEgLyogTW9kdWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMwRTNBQTdB
MTIwOUU4MzAwMEE0OUQwMSAvKiBNb2R1bGVDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyRDUw
MzY1RTFCQ0M3OTNGMDBFMjBCQjMgLyogTmF0aXZlV2ViR2VzdHVyZUV2ZW50TWFjLm1tIGluIFNv
dXJjZXMgKi8sCi0JCQkJNTEwNTIzODExQzc1NDFGRjAwNzk5M0NCIC8qIExlZ2FjeVVuaXF1ZUlE
QkRhdGFiYXNlSWRlbnRpZmllci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREE5NDQ5RTE4ODRF
NEYwMDBFRDg2REIgLyogTmF0aXZlV2ViS2V5Ym9hcmRFdmVudElPUy5tbSBpbiBTb3VyY2VzICov
LAogCQkJCUMwMkJGRjFFMTI1MTUwMkUwMDlDQ0JFQSAvKiBOYXRpdmVXZWJLZXlib2FyZEV2ZW50
TWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzFFQTI1RDIxMzRGNzhDMDAwNUIxNDUyIC8qIE5h
dGl2ZVdlYk1vdXNlRXZlbnRNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTg4NjAsNyArODc2MSw2
IEBACiAJCQkJMUFCQzNERjUxODk5RTQzNzAwNEYwNjI2IC8qIE5hdmlnYXRpb25TdGF0ZS5tbSBp
biBTb3VyY2VzICovLAogCQkJCTFBNkZCQTJCMTFFNjg2MjcwMERCMTM3MSAvKiBOZXRzY2FwZUJy
b3dzZXJGdW5jcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTZGQkQyOTExRTY5QkMyMDBEQjEz
NzEgLyogTmV0c2NhcGVQbHVnaW4uY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTEwNTIzN0YxQzc1
NDFGRjAwNzk5M0NCIC8qIExlZ2FjeVVuaXF1ZUlEQkRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBRTVCN0ZCMTFFN0FFRDIwMEJBNjc2NyAvKiBOZXRzY2FwZVBsdWdpbk1hYy5tbSBp
biBTb3VyY2VzICovLAogCQkJCTFBNEE5QzU1MTJCODE2Q0YwMDhGRTk4NCAvKiBOZXRzY2FwZVBs
dWdpbk1vZHVsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTRBOUM5QTEyQjgyMUNEMDA4RkU5
ODQgLyogTmV0c2NhcGVQbHVnaW5Nb2R1bGVNYWMubW0gaW4gU291cmNlcyAqLywKQEAgLTkwMjUs
OCArODkyNSw2IEBACiAJCQkJMUEyNEJGM0ExMjA4OTZBNjAwRkJCMDU5IC8qIFNoYXJlZE1lbW9y
eU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREFGMDZENzE4QkQxQTQ3MDA4MUNFQjEgLyog
U21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTJERTY5
NDNEMThCRDJBNjgwMDVDMTVFNSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUxMDY0RDM1MTg5NzgxQzQwMDRCMkZF
QiAvKiBTUUxpdGVJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTExRDgyMDExODVC
QzIxNzAwMUFFRDU2IC8qIFNRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTUyNzJCMjhBMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1MUE0RDVBOTE2Q0FDNEZGMDAwRTYxNUUgLyogU3RhdGlzdGljc1JlcXVl
c3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFEMzMwNkUxNkIxRDk5MTAwNEY2MEU3IC8qIFN0
b3JhZ2VBcmVhSW1wbC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTkwNDQsNyArODk0Miw2IEBACiAJ
CQkJMUFBRjI2MzgxNDY4N0MzOTAwNEExRThBIC8qIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFGMDVEODYxNDY4ODM0ODAwOEIxRTgxIC8qIFRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhUHJveHkubW0gaW4gU291cmNlcyAqLywKIAkJCQkx
QUZFNDM2NTE4QjZDMDgxMDA5QzdBNDggLyogVUlEZWxlZ2F0ZS5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTUxNjU0RUZEMTg0RUYzM0YwMDdEQzgzNyAvKiBVbmlxdWVJREJEYXRhYmFzZUJhY2tpbmdT
dG9yZVNRTGl0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQTY0MjQ1RjEyREUyOUExMDBDQUFF
MkMgLyogVXBkYXRlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQUMxMzM2NzE4NTY1QjU3
MDBGM0VDMDUgLyogVXNlckRhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTU3MzlCQkMxQjQy
MDQwMzAwRDI1OEMxIC8qIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTkxNDcsOSArOTA0NCw2IEBACiAJCQkJNTFEMDJGNjQxMzJFQzVCOTAw
QkVBQTk2IC8qIFdlYkljb25EYXRhYmFzZU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk1MTFCMjRBNjEzMkUwOTU3MDAwNjVBMEMgLyogV2ViSWNvbkRhdGFiYXNlUHJveHku
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFEMDJGNkIxMzJFQzczNzAwQkVBQTk2IC8qIFdlYklj
b25EYXRhYmFzZVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTUx
RTM1MUY1MTgwRjVDNzUwMEU1M0JFOSAvKiBXZWJJREJGYWN0b3J5QmFja2VuZC5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQk1MTI5MDk5MjE4M0FDRUFGMDA1NTIyQTYgLyogV2ViSURCU2VydmVyQ29u
bmVjdGlvbi5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1MUM5NjExODE4M0QyOTQ3MDBEMjAwMkUg
LyogV2ViSURCU2VydmVyQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQ0NGNkFCQzEyQzkxRUY5MDA4RjlDMzUgLyogV2ViSW1hZ2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUM4RTI4MjExMjc1RDE1NDAwQkM3QkQwIC8qIFdlYkluc3BlY3Rvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzExMUE2MDExMkY0RkJCMDAzMzdCQUIgLyogV2ViSW5zcGVj
dG9yQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkZhY3RvcnlCYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJGYWN0
b3J5QmFja2VuZC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzODhjNWYuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERC
L1dlYklEQkZhY3RvcnlCYWNrZW5kLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2ViSURCRmFjdG9yeUJhY2tlbmQuaCIKLQotI2lu
Y2x1ZGUgIklEQlV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJX
ZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1
ZGUgIldlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
RE9NU3RyaW5nTGlzdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSURCQ2FsbGJhY2tzLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9JREJDdXJzb3JCYWNrZW5kLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JREJE
YXRhYmFzZUNhbGxiYWNrcy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZWN1cml0eU9yaWdpbi5oPgotI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0KLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNpZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKLQot
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi10eXBlZGVm
IEhhc2hNYXA8U3RyaW5nLCBJREJEYXRhYmFzZUJhY2tlbmQqPiBJREJEYXRhYmFzZUJhY2tlbmRN
YXA7Ci0KLXN0YXRpYyBJREJEYXRhYmFzZUJhY2tlbmRNYXAmIHNoYXJlZERhdGFiYXNlQmFja2Vu
ZE1hcCgpCi17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElEQkRhdGFiYXNlQmFja2VuZE1h
cD4gZGF0YWJhc2VCYWNrZW5kTWFwOwotICAgIHJldHVybiBkYXRhYmFzZUJhY2tlbmRNYXA7Ci19
Ci0KLXN0YXRpYyBIYXNoTWFwPFN0cmluZywgSGFzaFNldDxTdHJpbmc+PiYgc2hhcmVkUmVjZW50
RGF0YWJhc2VOYW1lTWFwKCkKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDxT
dHJpbmcsIEhhc2hTZXQ8U3RyaW5nPj4+IHJlY2VudERhdGFiYXNlTmFtZU1hcDsKLSAgICByZXR1
cm4gcmVjZW50RGF0YWJhc2VOYW1lTWFwOwotfQotCi1zdGF0aWMgU3RyaW5nIGNvbWJpbmVkU2Vj
dXJpdHlPcmlnaW5JZGVudGlmaWVyKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiBvcGVu
aW5nT3JpZ2luLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgbWFpbkZyYW1lT3JpZ2lu
KQotewotICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKLQotICAgIFN0cmluZyBvcmln
aW5TdHJpbmcgPSBvcGVuaW5nT3JpZ2luLnRvU3RyaW5nKCk7Ci0gICAgaWYgKG9yaWdpblN0cmlu
ZyA9PSAibnVsbCIpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChvcmlnaW5TdHJpbmcpOwotICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdfJyk7Ci0K
LSAgICBvcmlnaW5TdHJpbmcgPSBtYWluRnJhbWVPcmlnaW4udG9TdHJpbmcoKTsKLSAgICBpZiAo
b3JpZ2luU3RyaW5nID09ICJudWxsIikKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKG9yaWdpblN0cmluZyk7Ci0KLSAgICByZXR1cm4gc3RyaW5nQnVp
bGRlci50b1N0cmluZygpOwotfQotCi1XZWJJREJGYWN0b3J5QmFja2VuZDo6V2ViSURCRmFjdG9y
eUJhY2tlbmQoKQotewotfQotCi1XZWJJREJGYWN0b3J5QmFja2VuZDo6fldlYklEQkZhY3RvcnlC
YWNrZW5kKCkKLXsKLX0KLQotdm9pZCBXZWJJREJGYWN0b3J5QmFja2VuZDo6Z2V0RGF0YWJhc2VO
YW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBjb25zdCBTZWN1cml0eU9y
aWdpbiYgb3BlbmluZ09yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG1haW5GcmFtZU9yaWdp
biwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBMT0coSURCLCAiV2Vi
SURCRmFjdG9yeUJhY2tlbmQ6OmdldERhdGFiYXNlTmFtZXMiKTsKLQotICAgIFN0cmluZyBzZWN1
cml0eU9yaWdpbklkZW50aWZpZXIgPSBjb21iaW5lZFNlY3VyaXR5T3JpZ2luSWRlbnRpZmllcihv
cGVuaW5nT3JpZ2luLCBtYWluRnJhbWVPcmlnaW4pOwotICAgIGlmIChzZWN1cml0eU9yaWdpbklk
ZW50aWZpZXIuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OkludmFsaWRBY2Nlc3NFcnJv
ciwgQVNDSUlMaXRlcmFsKCJEb2N1bWVudCBpcyBub3QgYWxsb3dlZCB0byB1c2UgSW5kZXhlZCBE
YXRhYmFzZXMiKSkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPERPTVN0
cmluZ0xpc3Q+IGRhdGFiYXNlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLQotICAg
IGF1dG8gcmVjZW50TmFtZUl0ZXJhdG9yID0gc2hhcmVkUmVjZW50RGF0YWJhc2VOYW1lTWFwKCku
ZmluZChzZWN1cml0eU9yaWdpbklkZW50aWZpZXIpOwotICAgIGlmIChyZWNlbnROYW1lSXRlcmF0
b3IgIT0gc2hhcmVkUmVjZW50RGF0YWJhc2VOYW1lTWFwKCkuZW5kKCkpIHsKLSAgICAgICAgSGFz
aFNldDxTdHJpbmc+JiBmb3VuZE5hbWVzID0gcmVjZW50TmFtZUl0ZXJhdG9yLT52YWx1ZTsKLSAg
ICAgICAgZm9yIChjb25zdCBTdHJpbmcmIG5hbWUgOiBmb3VuZE5hbWVzKQotICAgICAgICAgICAg
ZGF0YWJhc2VOYW1lcy0+YXBwZW5kKG5hbWUpOwotICAgIH0KLQotICAgIGNhbGxiYWNrcy0+b25T
dWNjZXNzKGRhdGFiYXNlTmFtZXMucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBXZWJJREJGYWN0b3J5
QmFja2VuZDo6b3Blbihjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgdWludDY0X3QgdmVyc2lv
biwgaW50NjRfdCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcywg
Y29uc3QgU2VjdXJpdHlPcmlnaW4mIG9wZW5pbmdPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2lu
JiBtYWluRnJhbWVPcmlnaW4pCi17Ci0gICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKLSAg
ICBMT0coSURCLCAiV2ViSURCRmFjdG9yeUJhY2tlbmQ6Om9wZW4iKTsKLQotICAgIFN0cmluZyBk
YXRhYmFzZUlkZW50aWZpZXIgPSB1bmlxdWVEYXRhYmFzZUlkZW50aWZpZXIoZGF0YWJhc2VOYW1l
LCBvcGVuaW5nT3JpZ2luLCBtYWluRnJhbWVPcmlnaW4pOwotICAgIGlmIChkYXRhYmFzZUlkZW50
aWZpZXIuaXNOdWxsKCkpIHsKLSAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNl
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SW52YWxpZEFjY2Vzc0Vycm9yLCAi
RG9jdW1lbnQgaXMgbm90IGFsbG93ZWQgdG8gdXNlIEluZGV4ZWQgRGF0YWJhc2VzIikpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU3RyaW5nIHNlY3VyaXR5T3JpZ2luSWRlbnRpZmll
ciA9IGNvbWJpbmVkU2VjdXJpdHlPcmlnaW5JZGVudGlmaWVyKG9wZW5pbmdPcmlnaW4sIG1haW5G
cmFtZU9yaWdpbik7Ci0gICAgQVNTRVJUKCFzZWN1cml0eU9yaWdpbklkZW50aWZpZXIuaXNFbXB0
eSgpKTsKLQotICAgIGF1dG8gcmVjZW50TmFtZUl0ZXJhdG9yID0gc2hhcmVkUmVjZW50RGF0YWJh
c2VOYW1lTWFwKCkuZmluZChzZWN1cml0eU9yaWdpbklkZW50aWZpZXIpOwotICAgIGlmIChyZWNl
bnROYW1lSXRlcmF0b3IgPT0gc2hhcmVkUmVjZW50RGF0YWJhc2VOYW1lTWFwKCkuZW5kKCkpIHsK
LSAgICAgICAgSGFzaFNldDxTdHJpbmc+IG5hbWVzOwotICAgICAgICBuYW1lcy5hZGQoZGF0YWJh
c2VOYW1lKTsKLSAgICAgICAgc2hhcmVkUmVjZW50RGF0YWJhc2VOYW1lTWFwKCkuc2V0KHNlY3Vy
aXR5T3JpZ2luSWRlbnRpZmllciwgbmFtZXMpOwotICAgIH0gZWxzZQotICAgICAgICByZWNlbnRO
YW1lSXRlcmF0b3ItPnZhbHVlLmFkZChkYXRhYmFzZU5hbWUpOwotCi0gICAgSURCRGF0YWJhc2VC
YWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IHNoYXJlZERhdGFiYXNlQmFja2VuZE1hcCgpLmZpbmQo
ZGF0YWJhc2VJZGVudGlmaWVyKTsKLQotICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmQ+IGRh
dGFiYXNlQmFja2VuZDsKLSAgICBpZiAoaXQgPT0gc2hhcmVkRGF0YWJhc2VCYWNrZW5kTWFwKCku
ZW5kKCkpIHsKLSAgICAgICAgUmVmUHRyPElEQlNlcnZlckNvbm5lY3Rpb24+IHNlcnZlckNvbm5l
Y3Rpb24gPSBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpjcmVhdGUoZGF0YWJhc2VOYW1lLCBvcGVu
aW5nT3JpZ2luLCBtYWluRnJhbWVPcmlnaW4pOwotICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBJ
REJEYXRhYmFzZUJhY2tlbmQ6OmNyZWF0ZShkYXRhYmFzZU5hbWUsIGRhdGFiYXNlSWRlbnRpZmll
ciwgdGhpcywgKnNlcnZlckNvbm5lY3Rpb24pOwotICAgICAgICBzaGFyZWREYXRhYmFzZUJhY2tl
bmRNYXAoKS5zZXQoZGF0YWJhc2VJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0KCkpOwot
ICAgIH0gZWxzZQotICAgICAgICBkYXRhYmFzZUJhY2tlbmQgPSBpdC0+dmFsdWU7Ci0KLSAgICBk
YXRhYmFzZUJhY2tlbmQtPm9wZW5Db25uZWN0aW9uKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFj
a3MsIHRyYW5zYWN0aW9uSWQsIHZlcnNpb24pOwotfQotCi12b2lkIFdlYklEQkZhY3RvcnlCYWNr
ZW5kOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU2Vj
dXJpdHlPcmlnaW4mIG9wZW5pbmdPcmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBtYWluRnJh
bWVPcmlnaW4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqKQotewotICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgTE9H
KElEQiwgIldlYklEQkZhY3RvcnlCYWNrZW5kOjpkZWxldGVEYXRhYmFzZSIpOwotCi0gICAgU3Ry
aW5nIGRhdGFiYXNlSWRlbnRpZmllciA9IHVuaXF1ZURhdGFiYXNlSWRlbnRpZmllcihkYXRhYmFz
ZU5hbWUsIG9wZW5pbmdPcmlnaW4sIG1haW5GcmFtZU9yaWdpbik7Ci0gICAgaWYgKGRhdGFiYXNl
SWRlbnRpZmllci5pc051bGwoKSkgewotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJbnZhbGlkQWNjZXNzRXJy
b3IsICJEb2N1bWVudCBpcyBub3QgYWxsb3dlZCB0byB1c2UgSW5kZXhlZCBEYXRhYmFzZXMiKSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJpbmcgc2VjdXJpdHlPcmlnaW5JZGVu
dGlmaWVyID0gY29tYmluZWRTZWN1cml0eU9yaWdpbklkZW50aWZpZXIob3BlbmluZ09yaWdpbiwg
bWFpbkZyYW1lT3JpZ2luKTsKLSAgICBBU1NFUlQoIXNlY3VyaXR5T3JpZ2luSWRlbnRpZmllci5p
c0VtcHR5KCkpOwotCi0gICAgYXV0byByZWNlbnROYW1lSXRlcmF0b3IgPSBzaGFyZWRSZWNlbnRE
YXRhYmFzZU5hbWVNYXAoKS5maW5kKHNlY3VyaXR5T3JpZ2luSWRlbnRpZmllcik7Ci0gICAgaWYg
KHJlY2VudE5hbWVJdGVyYXRvciAhPSBzaGFyZWRSZWNlbnREYXRhYmFzZU5hbWVNYXAoKS5lbmQo
KSkgewotICAgICAgICByZWNlbnROYW1lSXRlcmF0b3ItPnZhbHVlLnJlbW92ZShkYXRhYmFzZU5h
bWUpOwotICAgICAgICBpZiAocmVjZW50TmFtZUl0ZXJhdG9yLT52YWx1ZS5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICBzaGFyZWRSZWNlbnREYXRhYmFzZU5hbWVNYXAoKS5yZW1vdmUocmVjZW50TmFt
ZUl0ZXJhdG9yKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB0aGVyZSdzIGFscmVhZHkgYSBjb25uZWN0
aW9uIHRvIHRoZSBkYXRhYmFzZSwgZGVsZXRlIGl0IGRpcmVjdGx5LgotICAgIElEQkRhdGFiYXNl
QmFja2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBzaGFyZWREYXRhYmFzZUJhY2tlbmRNYXAoKS5maW5k
KGRhdGFiYXNlSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ICE9IHNoYXJlZERhdGFiYXNlQmFja2Vu
ZE1hcCgpLmVuZCgpKSB7Ci0gICAgICAgIGl0LT52YWx1ZS0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJh
Y2tzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFJlZlB0cjxJREJTZXJ2ZXJDb25u
ZWN0aW9uPiBzZXJ2ZXJDb25uZWN0aW9uID0gV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6Y3JlYXRl
KGRhdGFiYXNlTmFtZSwgb3BlbmluZ09yaWdpbiwgbWFpbkZyYW1lT3JpZ2luKTsKLSAgICBSZWZQ
dHI8SURCRGF0YWJhc2VCYWNrZW5kPiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFzZUJhY2tl
bmQ6OmNyZWF0ZShkYXRhYmFzZU5hbWUsIGRhdGFiYXNlSWRlbnRpZmllciwgdGhpcywgKnNlcnZl
ckNvbm5lY3Rpb24pOwotCi0gICAgc2hhcmVkRGF0YWJhc2VCYWNrZW5kTWFwKCkuc2V0KGRhdGFi
YXNlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKLSAgICBkYXRhYmFzZUJhY2tl
bmQtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7Ci0gICAgc2hhcmVkRGF0YWJhc2VCYWNrZW5k
TWFwKCkucmVtb3ZlKGRhdGFiYXNlSWRlbnRpZmllcik7Ci19Ci0KLXZvaWQgV2ViSURCRmFjdG9y
eUJhY2tlbmQ6OnJlbW92ZUlEQkRhdGFiYXNlQmFja2VuZChjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIpCi17Ci0gICAgc2hhcmVkRGF0YWJhc2VCYWNrZW5kTWFwKCkucmVtb3ZlKGlkZW50aWZpZXIp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFT
RV9QUk9DRVNTKQotI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkZh
Y3RvcnlCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRl
eGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTc2OThmOS4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFi
YXNlcy9JbmRleGVkREIvV2ViSURCRmFjdG9yeUJhY2tlbmQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgot
ICovCi0KLSNpZm5kZWYgV2ViSURCRmFjdG9yeUJhY2tlbmRfaAotI2RlZmluZSBXZWJJREJGYWN0
b3J5QmFja2VuZF9oCi0KLSNpbmNsdWRlIDxXZWJDb3JlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlLmg+Ci0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLQotbmFtZXNwYWNlIFdlYktp
dCB7Ci0KLWNsYXNzIFdlYklEQkZhY3RvcnlCYWNrZW5kIGZpbmFsIDogcHVibGljIFdlYkNvcmU6
OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdl
YklEQkZhY3RvcnlCYWNrZW5kPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFdlYklE
QkZhY3RvcnlCYWNrZW5kKTsgfQotCi0gICAgdmlydHVhbCB+V2ViSURCRmFjdG9yeUJhY2tlbmQo
KTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCQ2FsbGJhY2tzPiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIG9wZW5pbmdP
cmlnaW4sIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiBtYWluRnJhbWVPcmlnaW4sIFdl
YkNvcmU6OlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIHVpbnQ2NF90IHZlcnNpb24sIGludDY0X3QgdHJh
bnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRy
PFdlYkNvcmU6OklEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4mIG9wZW5pbmdPcmlnaW4sIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiBtYWlu
RnJhbWVPcmlnaW4pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luJiBvcGVuaW5n
T3JpZ2luLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiYgbWFpbkZyYW1lT3JpZ2luLCBQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OlNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJREJEYXRhYmFz
ZUJhY2tlbmQoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKSBvdmVycmlkZTsKLQotcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBXZWJJREJGYWN0b3J5QmFja2VuZCgpOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNl
bmRpZiAvLyBXZWJJREJGYWN0b3J5QmFja2VuZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURC
U2VydmVyQ29ubmVjdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3ODBj
ZTMuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5k
ZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzE1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJXZWJJREJTZXJ2ZXJDb25uZWN0aW9u
LmgiCi0KLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BS
T0NFU1MpCi0KLSNpbmNsdWRlICJBc3luY1JlcXVlc3QuaCIKLSNpbmNsdWRlICJEYXRhUmVmZXJl
bmNlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbk1lc3NhZ2VzLmgi
Ci0jaW5jbHVkZSAiRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZXMuaCIKLSNp
bmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCi0j
aW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUgIldlYlRvRGF0YWJhc2VQcm9jZXNzQ29u
bmVjdGlvbi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvSURCRGF0YWJhc2VNZXRhZGF0YS5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvSURCS2V5UmFuZ2VEYXRhLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZWN1
cml0eU9yaWdpbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW5EYXRhLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotc3RhdGlj
IHVpbnQ2NF90IGdlbmVyYXRlU2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIoKQotewotICAgIEFT
U0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgc3RhdGljIHVpbnQ2NF90IGlkZW50aWZpZXIg
PSAwOwotICAgIHJldHVybiArK2lkZW50aWZpZXI7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViSURCU2Vy
dmVyQ29ubmVjdGlvbj4gV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgb3BlbmluZ09yaWdpbiwgY29u
c3QgU2VjdXJpdHlPcmlnaW4mIG1haW5GcmFtZU9yaWdpbikKLXsKLSAgICBSZWZQdHI8V2ViSURC
U2VydmVyQ29ubmVjdGlvbj4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFdlYklEQlNlcnZlckNvbm5l
Y3Rpb24oZGF0YWJhc2VOYW1lLCBvcGVuaW5nT3JpZ2luLCBtYWluRnJhbWVPcmlnaW4pKTsKLSAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+cmVnaXN0ZXJXZWJJREJTZXJ2ZXJDb25uZWN0aW9uKCpyZXN1bHQpOwotICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOwotfQotCi1XZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpXZWJJREJTZXJ2
ZXJDb25uZWN0aW9uKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTZWN1cml0eU9y
aWdpbiYgb3BlbmluZ09yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG1haW5GcmFtZU9yaWdp
bikKLSAgICA6IG1fc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIoZ2VuZXJhdGVTZXJ2ZXJDb25u
ZWN0aW9uSWRlbnRpZmllcigpKQotICAgICwgbV9kYXRhYmFzZU5hbWUoZGF0YWJhc2VOYW1lKQot
ICAgICwgbV9vcGVuaW5nT3JpZ2luKG9wZW5pbmdPcmlnaW4uaXNvbGF0ZWRDb3B5KCkpCi0gICAg
LCBtX21haW5GcmFtZU9yaWdpbihtYWluRnJhbWVPcmlnaW4uaXNvbGF0ZWRDb3B5KCkpCi17Ci0g
ICAgc2VuZChNZXNzYWdlczo6RGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uOjpFc3RhYmxp
c2hJREJDb25uZWN0aW9uKG1fc2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIpKTsKLSAgICBzZW5k
KE1lc3NhZ2VzOjpEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpFc3RhYmxpc2hDb25uZWN0
aW9uKGRhdGFiYXNlTmFtZSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4o
b3BlbmluZ09yaWdpbiksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2luKG1h
aW5GcmFtZU9yaWdpbikpKTsKLX0KLQotV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6fldlYklEQlNl
cnZlckNvbm5lY3Rpb24oKQotewotICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlRvRGF0
YWJhc2VQcm9jZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXZWJJREJTZXJ2ZXJDb25uZWN0aW9uKCp0
aGlzKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgaXQgOiBtX3NlcnZlclJlcXVlc3RzKQotICAg
ICAgICBpdC52YWx1ZS0+cmVxdWVzdEFib3J0ZWQoKTsKLX0KLQotYm9vbCBXZWJJREJTZXJ2ZXJD
b25uZWN0aW9uOjppc0Nsb3NlZCgpCi17Ci0gICAgLy8gRklYTUU6IFJldHVybiByZWFsIHZhbHVl
IGhlcmUuCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlv
bjo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBCb29sQ2FsbGJhY2tGdW5jdGlv
biBzdWNjZXNzQ2FsbGJhY2spCi17Ci0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVx
dWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8Ym9vbD46OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2spOwot
Ci0gICAgc2VydmVyUmVxdWVzdC0+c2V0QWJvcnRIYW5kbGVyKFtzdWNjZXNzQ2FsbGJhY2tdIHsK
LSAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNlKTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90
IHJlcXVlc3RJRCA9IHNlcnZlclJlcXVlc3QtPnJlcXVlc3RJRCgpOwotICAgIEFTU0VSVCghbV9z
ZXJ2ZXJSZXF1ZXN0cy5jb250YWlucyhyZXF1ZXN0SUQpKTsKLSAgICBtX3NlcnZlclJlcXVlc3Rz
LmFkZChyZXF1ZXN0SUQsIHNlcnZlclJlcXVlc3QucmVsZWFzZSgpKTsKLQotICAgIExPRyhJREIs
ICJXZWJQcm9jZXNzIGRlbGV0ZURhdGFiYXNlIHJlcXVlc3QgSUQgJSIgUFJJdTY0LCByZXF1ZXN0
SUQpOwotCi0gICAgc2VuZChNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6
RGVsZXRlRGF0YWJhc2UocmVxdWVzdElELCBuYW1lKSk7Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVy
Q29ubmVjdGlvbjo6ZGlkRGVsZXRlRGF0YWJhc2UodWludDY0X3QgcmVxdWVzdElELCBib29sIHN1
Y2Nlc3MpCi17Ci0gICAgTE9HKElEQiwgIldlYlByb2Nlc3MgZGlkRGVsZXRlRGF0YWJhc2UgcmVx
dWVzdCBJRCAlIiBQUkl1NjQsIHJlcXVlc3RJRCk7Ci0KLSAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0
PiBzZXJ2ZXJSZXF1ZXN0ID0gbV9zZXJ2ZXJSZXF1ZXN0cy50YWtlKHJlcXVlc3RJRCk7Ci0KLSAg
ICBpZiAoIXNlcnZlclJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNlcnZlclJlcXVl
c3QtPmNvbXBsZXRlUmVxdWVzdChzdWNjZXNzKTsKLX0KLQotdm9pZCBXZWJJREJTZXJ2ZXJDb25u
ZWN0aW9uOjpnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEoR2V0SURCRGF0YWJhc2VN
ZXRhZGF0YUZ1bmN0aW9uIGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBSZWZQdHI8QXN5bmNS
ZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDxJREJEYXRhYmFzZU1ldGFk
YXRhLCBib29sPjo6Y3JlYXRlKGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KLSAgICBzZXJ2ZXJSZXF1
ZXN0LT5zZXRBYm9ydEhhbmRsZXIoW2NvbXBsZXRpb25DYWxsYmFja10gewotICAgICAgICBJREJE
YXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhOwotICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2sobWV0
YWRhdGEsIGZhbHNlKTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHNlcnZl
clJlcXVlc3QtPnJlcXVlc3RJRCgpOwotICAgIEFTU0VSVCghbV9zZXJ2ZXJSZXF1ZXN0cy5jb250
YWlucyhyZXF1ZXN0SUQpKTsKLSAgICBtX3NlcnZlclJlcXVlc3RzLmFkZChyZXF1ZXN0SUQsIHNl
cnZlclJlcXVlc3QucmVsZWFzZSgpKTsKLQotICAgIExPRyhJREIsICJXZWJQcm9jZXNzIGdldE9y
RXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YSByZXF1ZXN0IElEICUiIFBSSXU2NCwgcmVxdWVz
dElEKTsKLQotICAgIHNlbmQoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246
OkdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YShyZXF1ZXN0SUQpKTsKLX0KLQotdm9p
ZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpkaWRHZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0
YWRhdGEodWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MsIGNvbnN0IElEQkRhdGFiYXNl
TWV0YWRhdGEmIG1ldGFkYXRhKQotewotICAgIExPRyhJREIsICJXZWJQcm9jZXNzIGRpZEdldE9y
RXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YSByZXF1ZXN0IElEICUiIFBSSXU2NCwgcmVxdWVz
dElEKTsKLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHNlcnZlclJlcXVlc3QgPSBtX3NlcnZl
clJlcXVlc3RzLnRha2UocmVxdWVzdElEKTsKLQotICAgIGlmICghc2VydmVyUmVxdWVzdCkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgc2VydmVyUmVxdWVzdC0+Y29tcGxldGVSZXF1ZXN0KG1ldGFk
YXRhLCBzdWNjZXNzKTsKLX0KLQotdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpjbG9zZSgp
Ci17Ci0gICAgTE9HKElEQiwgIldlYlByb2Nlc3MgY2xvc2UiKTsKLQotICAgIFJlZlB0cjxXZWJJ
REJTZXJ2ZXJDb25uZWN0aW9uPiBwcm90ZWN0b3IodGhpcyk7Ci0KLSAgICBmb3IgKGF1dG8mIHJl
cXVlc3QgOiBtX3NlcnZlclJlcXVlc3RzKQotICAgICAgICByZXF1ZXN0LnZhbHVlLT5yZXF1ZXN0
QWJvcnRlZCgpOwotCi0gICAgbV9zZXJ2ZXJSZXF1ZXN0cy5jbGVhcigpOwotCi0gICAgc2VuZChN
ZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Q2xvc2UoKSk7Ci19Ci0KLXZv
aWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6b3BlblRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNh
Y3Rpb25JRCwgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJRHMsIEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlIG1vZGUsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxs
YmFjaykKLXsKLSAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0gQXN5bmNS
ZXF1ZXN0SW1wbDxib29sPjo6Y3JlYXRlKHN1Y2Nlc3NDYWxsYmFjayk7Ci0KLSAgICBzZXJ2ZXJS
ZXF1ZXN0LT5zZXRBYm9ydEhhbmRsZXIoW3N1Y2Nlc3NDYWxsYmFja10gewotICAgICAgICBzdWNj
ZXNzQ2FsbGJhY2soZmFsc2UpOwotICAgIH0pOwotCi0gICAgdWludDY0X3QgcmVxdWVzdElEID0g
c2VydmVyUmVxdWVzdC0+cmVxdWVzdElEKCk7Ci0gICAgQVNTRVJUKCFtX3NlcnZlclJlcXVlc3Rz
LmNvbnRhaW5zKHJlcXVlc3RJRCkpOwotICAgIG1fc2VydmVyUmVxdWVzdHMuYWRkKHJlcXVlc3RJ
RCwgc2VydmVyUmVxdWVzdC5yZWxlYXNlKCkpOwotCi0gICAgTE9HKElEQiwgIldlYlByb2Nlc3Mg
b3BlblRyYW5zYWN0aW9uIElEICUiIFBSSWk2NCAiIChyZXF1ZXN0IElEICUiIFBSSXU2NCAiKSIs
IHRyYW5zYWN0aW9uSUQsIHJlcXVlc3RJRCk7Ci0KLSAgICBWZWN0b3I8aW50NjRfdD4gb2JqZWN0
U3RvcmVJRFZlY3RvcjsKLSAgICBjb3B5VG9WZWN0b3Iob2JqZWN0U3RvcmVJRHMsIG9iamVjdFN0
b3JlSURWZWN0b3IpOwotICAgIHNlbmQoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5l
Y3Rpb246Ok9wZW5UcmFuc2FjdGlvbihyZXF1ZXN0SUQsIHRyYW5zYWN0aW9uSUQsIG9iamVjdFN0
b3JlSURWZWN0b3IsIHN0YXRpY19jYXN0PHVpbnQ2NF90Pihtb2RlKSkpOwotfQotCi12b2lkIFdl
YklEQlNlcnZlckNvbm5lY3Rpb246OmRpZE9wZW5UcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0
SUQsIGJvb2wgc3VjY2VzcykKLXsKLSAgICBMT0coSURCLCAiV2ViUHJvY2VzcyBkaWRPcGVuVHJh
bnNhY3Rpb24gcmVxdWVzdCBJRCAlIiBQUkl1NjQsIHJlcXVlc3RJRCk7Ci0KLSAgICBSZWZQdHI8
QXN5bmNSZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0gbV9zZXJ2ZXJSZXF1ZXN0cy50YWtlKHJlcXVl
c3RJRCk7Ci0KLSAgICBpZiAoIXNlcnZlclJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAg
IHNlcnZlclJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdChzdWNjZXNzKTsKLX0KLQotdm9pZCBXZWJJ
REJTZXJ2ZXJDb25uZWN0aW9uOjpiZWdpblRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25J
RCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgUmVm
UHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8Pjo6Y3Jl
YXRlKGNvbXBsZXRpb25DYWxsYmFjaywgY29tcGxldGlvbkNhbGxiYWNrKTsKLQotICAgIHVpbnQ2
NF90IHJlcXVlc3RJRCA9IHNlcnZlclJlcXVlc3QtPnJlcXVlc3RJRCgpOwotICAgIEFTU0VSVCgh
bV9zZXJ2ZXJSZXF1ZXN0cy5jb250YWlucyhyZXF1ZXN0SUQpKTsKLSAgICBtX3NlcnZlclJlcXVl
c3RzLmFkZChyZXF1ZXN0SUQsIHNlcnZlclJlcXVlc3QucmVsZWFzZSgpKTsKLQotICAgIExPRyhJ
REIsICJXZWJQcm9jZXNzIGJlZ2luVHJhbnNhY3Rpb24gSUQgJSIgUFJJaTY0ICIgKHJlcXVlc3Qg
SUQgJSIgUFJJdTY0ICIpIiwgdHJhbnNhY3Rpb25JRCwgcmVxdWVzdElEKTsKLQotICAgIHNlbmQo
TWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OkJlZ2luVHJhbnNhY3Rpb24o
cmVxdWVzdElELCB0cmFuc2FjdGlvbklEKSk7Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVyQ29ubmVj
dGlvbjo6ZGlkQmVnaW5UcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wpCi17Ci0g
ICAgTE9HKElEQiwgIldlYlByb2Nlc3MgZGlkQmVnaW5UcmFuc2FjdGlvbiByZXF1ZXN0IElEICUi
IFBSSXU2NCwgcmVxdWVzdElEKTsKLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHNlcnZlclJl
cXVlc3QgPSBtX3NlcnZlclJlcXVlc3RzLnRha2UocmVxdWVzdElEKTsKLQotICAgIGlmICghc2Vy
dmVyUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2VydmVyUmVxdWVzdC0+Y29tcGxl
dGVSZXF1ZXN0KCk7Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6Y29tbWl0VHJh
bnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBCb29sQ2FsbGJhY2tGdW5jdGlvbiBzdWNj
ZXNzQ2FsbGJhY2spCi17Ci0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9
IEFzeW5jUmVxdWVzdEltcGw8Ym9vbD46OmNyZWF0ZShzdWNjZXNzQ2FsbGJhY2spOwotCi0gICAg
c2VydmVyUmVxdWVzdC0+c2V0QWJvcnRIYW5kbGVyKFtzdWNjZXNzQ2FsbGJhY2tdIHsKLSAgICAg
ICAgc3VjY2Vzc0NhbGxiYWNrKGZhbHNlKTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90IHJlcXVl
c3RJRCA9IHNlcnZlclJlcXVlc3QtPnJlcXVlc3RJRCgpOwotICAgIEFTU0VSVCghbV9zZXJ2ZXJS
ZXF1ZXN0cy5jb250YWlucyhyZXF1ZXN0SUQpKTsKLSAgICBtX3NlcnZlclJlcXVlc3RzLmFkZChy
ZXF1ZXN0SUQsIHNlcnZlclJlcXVlc3QucmVsZWFzZSgpKTsKLQotICAgIExPRyhJREIsICJXZWJQ
cm9jZXNzIGNvbW1pdFRyYW5zYWN0aW9uIElEICUiIFBSSWk2NCAiIChyZXF1ZXN0IElEICUiIFBS
SXU2NCAiKSIsIHRyYW5zYWN0aW9uSUQsIHJlcXVlc3RJRCk7Ci0KLSAgICBzZW5kKE1lc3NhZ2Vz
OjpEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpDb21taXRUcmFuc2FjdGlvbihyZXF1ZXN0
SUQsIHRyYW5zYWN0aW9uSUQpKTsKLX0KLQotdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpk
aWRDb21taXRUcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2VzcykKLXsK
LSAgICBMT0coSURCLCAiV2ViUHJvY2VzcyBkaWRDb21taXRUcmFuc2FjdGlvbiByZXF1ZXN0IElE
ICUiIFBSSXU2NCwgcmVxdWVzdElEKTsKLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHNlcnZl
clJlcXVlc3QgPSBtX3NlcnZlclJlcXVlc3RzLnRha2UocmVxdWVzdElEKTsKLQotICAgIGlmICgh
c2VydmVyUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2VydmVyUmVxdWVzdC0+Y29t
cGxldGVSZXF1ZXN0KHN1Y2Nlc3MpOwotfQotCi12b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246
OnJlc2V0VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiBz
ZXJ2ZXJSZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDw+OjpjcmVhdGUoY29tcGxldGlvbkNhbGxi
YWNrLCBjb21wbGV0aW9uQ2FsbGJhY2spOwotCi0gICAgdWludDY0X3QgcmVxdWVzdElEID0gc2Vy
dmVyUmVxdWVzdC0+cmVxdWVzdElEKCk7Ci0gICAgQVNTRVJUKCFtX3NlcnZlclJlcXVlc3RzLmNv
bnRhaW5zKHJlcXVlc3RJRCkpOwotICAgIG1fc2VydmVyUmVxdWVzdHMuYWRkKHJlcXVlc3RJRCwg
c2VydmVyUmVxdWVzdC5yZWxlYXNlKCkpOwotCi0gICAgTE9HKElEQiwgIldlYlByb2Nlc3MgcmVz
ZXRUcmFuc2FjdGlvbiBJRCAlIiBQUklpNjQgIiAocmVxdWVzdCBJRCAlIiBQUkl1NjQgIikiLCB0
cmFuc2FjdGlvbklELCByZXF1ZXN0SUQpOwotCi0gICAgc2VuZChNZXNzYWdlczo6RGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbjo6UmVzZXRUcmFuc2FjdGlvbihyZXF1ZXN0SUQsIHRyYW5zYWN0
aW9uSUQpKTsKLX0KLQotdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpkaWRSZXNldFRyYW5z
YWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCkKLXsKLSAgICBMT0coSURCLCAiV2ViUHJv
Y2VzcyBkaWRSZXNldFRyYW5zYWN0aW9uIHJlcXVlc3QgSUQgJSIgUFJJdTY0LCByZXF1ZXN0SUQp
OwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9IG1fc2VydmVyUmVx
dWVzdHMudGFrZShyZXF1ZXN0SUQpOwotCi0gICAgaWYgKCFzZXJ2ZXJSZXF1ZXN0KQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBzZXJ2ZXJSZXF1ZXN0LT5jb21wbGV0ZVJlcXVlc3QoKTsKLX0KLQot
Ym9vbCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpyZXNldFRyYW5zYWN0aW9uU3luYyhpbnQ2NF90
IHRyYW5zYWN0aW9uSUQpCi17Ci0gICAgYm9vbCBzdWNjZXNzOwotICAgIHNlbmRTeW5jKE1lc3Nh
Z2VzOjpEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uOjpSZXNldFRyYW5zYWN0aW9uU3luYyh0
cmFuc2FjdGlvbklEKSwgTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OlJl
c2V0VHJhbnNhY3Rpb25TeW5jOjpSZXBseShzdWNjZXNzKSk7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7
Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6cm9sbGJhY2tUcmFuc2FjdGlvbihp
bnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkNh
bGxiYWNrKQotewotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHNlcnZlclJlcXVlc3QgPSBBc3lu
Y1JlcXVlc3RJbXBsPD46OmNyZWF0ZShjb21wbGV0aW9uQ2FsbGJhY2ssIGNvbXBsZXRpb25DYWxs
YmFjayk7Ci0KLSAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSBzZXJ2ZXJSZXF1ZXN0LT5yZXF1ZXN0
SUQoKTsKLSAgICBBU1NFUlQoIW1fc2VydmVyUmVxdWVzdHMuY29udGFpbnMocmVxdWVzdElEKSk7
Ci0gICAgbV9zZXJ2ZXJSZXF1ZXN0cy5hZGQocmVxdWVzdElELCBzZXJ2ZXJSZXF1ZXN0LnJlbGVh
c2UoKSk7Ci0KLSAgICBMT0coSURCLCAiV2ViUHJvY2VzcyByb2xsYmFja1RyYW5zYWN0aW9uIElE
ICUiIFBSSWk2NCAiIChyZXF1ZXN0IElEICUiIFBSSXU2NCAiKSIsIHRyYW5zYWN0aW9uSUQsIHJl
cXVlc3RJRCk7Ci0KLSAgICBzZW5kKE1lc3NhZ2VzOjpEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0
aW9uOjpSb2xsYmFja1RyYW5zYWN0aW9uKHJlcXVlc3RJRCwgdHJhbnNhY3Rpb25JRCkpOwotfQot
Ci12b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmRpZFJvbGxiYWNrVHJhbnNhY3Rpb24odWlu
dDY0X3QgcmVxdWVzdElELCBib29sKQotewotICAgIExPRyhJREIsICJXZWJQcm9jZXNzIGRpZFJv
bGxiYWNrVHJhbnNhY3Rpb24gcmVxdWVzdCBJRCAlIiBQUkl1NjQsIHJlcXVlc3RJRCk7Ci0KLSAg
ICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0gbV9zZXJ2ZXJSZXF1ZXN0cy50
YWtlKHJlcXVlc3RJRCk7Ci0KLSAgICBpZiAoIXNlcnZlclJlcXVlc3QpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHNlcnZlclJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdCgpOwotfQotCi1ib29sIFdl
YklEQlNlcnZlckNvbm5lY3Rpb246OnJvbGxiYWNrVHJhbnNhY3Rpb25TeW5jKGludDY0X3QgdHJh
bnNhY3Rpb25JRCkKLXsKLSAgICBib29sIHN1Y2Nlc3M7Ci0gICAgc2VuZFN5bmMoTWVzc2FnZXM6
OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OlJvbGxiYWNrVHJhbnNhY3Rpb25TeW5jKHRy
YW5zYWN0aW9uSUQpLCBNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Um9s
bGJhY2tUcmFuc2FjdGlvblN5bmM6OlJlcGx5KHN1Y2Nlc3MpKTsKLSAgICByZXR1cm4gc3VjY2Vz
czsKLX0KLQotdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpzZXRJbmRleEtleXMoaW50NjRf
dCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IGRhdGFiYXNlSUQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
RCwgY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIElEQktleSYgcHJpbWFyeUtleSwgY29u
c3QgVmVjdG9yPGludDY0X3QsIDE+JiBpbmRleElEcywgY29uc3QgVmVjdG9yPFZlY3RvcjxSZWZQ
dHI8V2ViQ29yZTo6SURCS2V5Pj4sIDE+JiBpbmRleEtleXMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLX0K
LQotdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpjcmVhdGVPYmplY3RTdG9yZShJREJUcmFu
c2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBDcmVhdGVPYmplY3RTdG9yZU9wZXJh
dGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgUmVmUHRyPEFzeW5jUmVxdWVz
dD4gc2VydmVyUmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8UGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUVycm9yPj46OmNyZWF0ZShjb21wbGV0aW9uQ2FsbGJhY2spOwotCi0gICAgU3RyaW5nIG9iamVj
dFN0b3JlTmFtZSA9IG9wZXJhdGlvbi5vYmplY3RTdG9yZU1ldGFkYXRhKCkubmFtZTsKLSAgICBz
ZXJ2ZXJSZXF1ZXN0LT5zZXRBYm9ydEhhbmRsZXIoW29iamVjdFN0b3JlTmFtZSwgY29tcGxldGlv
bkNhbGxiYWNrXSB7Ci0gICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3Jt
YXQoIlVua25vd24gZXJyb3Igb2NjdXJlZCBjcmVhdGluZyBvYmplY3Qgc3RvcmUgJyVzJyIsIG9i
amVjdFN0b3JlTmFtZS51dGY4KCkuZGF0YSgpKSkpOwotICAgIH0pOwotCi0gICAgdWludDY0X3Qg
cmVxdWVzdElEID0gc2VydmVyUmVxdWVzdC0+cmVxdWVzdElEKCk7Ci0gICAgQVNTRVJUKCFtX3Nl
cnZlclJlcXVlc3RzLmNvbnRhaW5zKHJlcXVlc3RJRCkpOwotICAgIG1fc2VydmVyUmVxdWVzdHMu
YWRkKHJlcXVlc3RJRCwgc2VydmVyUmVxdWVzdC5yZWxlYXNlKCkpOwotCi0gICAgTE9HKElEQiwg
IldlYlByb2Nlc3MgY3JlYXRlT2JqZWN0U3RvcmUgJyVzJyBpbiB0cmFuc2FjdGlvbiBJRCAlIiBQ
UklpNjQgIiAocmVxdWVzdCBJRCAlIiBQUkl1NjQgIikiLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVN
ZXRhZGF0YSgpLm5hbWUudXRmOCgpLmRhdGEoKSwgdHJhbnNhY3Rpb24uaWQoKSwgcmVxdWVzdElE
KTsKLQotICAgIHNlbmQoTWVzc2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OkNy
ZWF0ZU9iamVjdFN0b3JlKHJlcXVlc3RJRCwgdHJhbnNhY3Rpb24uaWQoKSwgb3BlcmF0aW9uLm9i
amVjdFN0b3JlTWV0YWRhdGEoKSkpOwotfQotCi12b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246
OmRpZENyZWF0ZU9iamVjdFN0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKQot
ewotICAgIExPRyhJREIsICJXZWJQcm9jZXNzIGRpZENyZWF0ZU9iamVjdFN0b3JlIHJlcXVlc3Qg
SUQgJSIgUFJJdTY0LCByZXF1ZXN0SUQpOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gc2Vy
dmVyUmVxdWVzdCA9IG1fc2VydmVyUmVxdWVzdHMudGFrZShyZXF1ZXN0SUQpOwotCi0gICAgaWYg
KCFzZXJ2ZXJSZXF1ZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXJ2ZXJSZXF1ZXN0LT5j
b21wbGV0ZVJlcXVlc3Qoc3VjY2VzcyA/IG51bGxwdHIgOiBJREJEYXRhYmFzZUVycm9yOjpjcmVh
dGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIlVua25vd24gZXJyb3Igb2Nj
dXJlZCBjcmVhdGluZyBvYmplY3Qgc3RvcmUiKSk7Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVyQ29u
bmVjdGlvbjo6Y3JlYXRlSW5kZXgoSURCVHJhbnNhY3Rpb25CYWNrZW5kJnRyYW5zYWN0aW9uLCBj
b25zdCBDcmVhdGVJbmRleE9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0g
ICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPj46OmNyZWF0ZShjb21wbGV0aW9uQ2FsbGJhY2sp
OwotCi0gICAgc2VydmVyUmVxdWVzdC0+c2V0QWJvcnRIYW5kbGVyKFtjb21wbGV0aW9uQ2FsbGJh
Y2tdIHsKLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0
ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiVW5rbm93biBlcnJvciBvY2N1
cmVkIGNyZWF0aW5nIGluZGV4IikpOwotICAgIH0pOwotCi0gICAgdWludDY0X3QgcmVxdWVzdElE
ID0gc2VydmVyUmVxdWVzdC0+cmVxdWVzdElEKCk7Ci0gICAgQVNTRVJUKCFtX3NlcnZlclJlcXVl
c3RzLmNvbnRhaW5zKHJlcXVlc3RJRCkpOwotICAgIG1fc2VydmVyUmVxdWVzdHMuYWRkKHJlcXVl
c3RJRCwgc2VydmVyUmVxdWVzdC5yZWxlYXNlKCkpOwotCi0gICAgTE9HKElEQiwgIldlYlByb2Nl
c3MgY3JlYXRlIGluZGV4IHJlcXVlc3QgSUQgJSIgUFJJdTY0LCByZXF1ZXN0SUQpOwotCi0gICAg
c2VuZChNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Q3JlYXRlSW5kZXgo
cmVxdWVzdElELCB0cmFuc2FjdGlvbi5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBv
cGVyYXRpb24uaWRiSW5kZXhNZXRhZGF0YSgpKSk7Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVyQ29u
bmVjdGlvbjo6ZGlkQ3JlYXRlSW5kZXgodWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3Mp
Ci17Ci0gICAgTE9HKElEQiwgIldlYlByb2Nlc3MgZGlkQ3JlYXRlSW5kZXggcmVxdWVzdCBJRCAl
IiBQUkl1NjQsIHJlcXVlc3RJRCk7Ci0KLSAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiBzZXJ2ZXJS
ZXF1ZXN0ID0gbV9zZXJ2ZXJSZXF1ZXN0cy50YWtlKHJlcXVlc3RJRCk7Ci0KLSAgICBpZiAoIXNl
cnZlclJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNlcnZlclJlcXVlc3QtPmNvbXBs
ZXRlUmVxdWVzdChzdWNjZXNzID8gbnVsbHB0ciA6IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiVW5rbm93biBlcnJvciBvY2N1cmVk
IGNyZWF0aW5nIGluZGV4IikpOwotfQotCi12b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmRl
bGV0ZUluZGV4KElEQlRyYW5zYWN0aW9uQmFja2VuZCZ0cmFuc2FjdGlvbiwgY29uc3QgRGVsZXRl
SW5kZXhPcGVyYXRpb24mIG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkIChQYXNzUmVmUHRy
PElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIFJlZlB0cjxB
c3luY1JlcXVlc3Q+IHNlcnZlclJlcXVlc3QgPSBBc3luY1JlcXVlc3RJbXBsPFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4+OjpjcmVhdGUoY29tcGxldGlvbkNhbGxiYWNrKTsKLQotICAgIHNl
cnZlclJlcXVlc3QtPnNldEFib3J0SGFuZGxlcihbY29tcGxldGlvbkNhbGxiYWNrXSB7Ci0gICAg
ICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIlVua25vd24gZXJyb3Igb2NjdXJlZCBkZWxldGlu
ZyBpbmRleCIpKTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHNlcnZlclJl
cXVlc3QtPnJlcXVlc3RJRCgpOwotICAgIEFTU0VSVCghbV9zZXJ2ZXJSZXF1ZXN0cy5jb250YWlu
cyhyZXF1ZXN0SUQpKTsKLSAgICBtX3NlcnZlclJlcXVlc3RzLmFkZChyZXF1ZXN0SUQsIHNlcnZl
clJlcXVlc3QucmVsZWFzZSgpKTsKLQotICAgIExPRyhJREIsICJXZWJQcm9jZXNzIGRlbGV0ZSBp
bmRleCByZXF1ZXN0IElEICUiIFBSSXU2NCwgcmVxdWVzdElEKTsKLQotICAgIHNlbmQoTWVzc2Fn
ZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OkRlbGV0ZUluZGV4KHJlcXVlc3RJRCwg
dHJhbnNhY3Rpb24uaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmlk
YkluZGV4TWV0YWRhdGEoKS5pZCkpOwotfQotCi12b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246
OmRpZERlbGV0ZUluZGV4KHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKQotewotICAg
IExPRyhJREIsICJXZWJQcm9jZXNzIGRpZERlbGV0ZUluZGV4IHJlcXVlc3QgSUQgJSIgUFJJdTY0
LCByZXF1ZXN0SUQpOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9
IG1fc2VydmVyUmVxdWVzdHMudGFrZShyZXF1ZXN0SUQpOwotCi0gICAgaWYgKCFzZXJ2ZXJSZXF1
ZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXJ2ZXJSZXF1ZXN0LT5jb21wbGV0ZVJlcXVl
c3Qoc3VjY2VzcyA/IG51bGxwdHIgOiBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIlVua25vd24gZXJyb3Igb2NjdXJlZCBkZWxldGlu
ZyBpbmRleCIpKTsKLX0KLQotdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpnZXQoSURCVHJh
bnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgY29uc3QgR2V0T3BlcmF0aW9uJiBvcGVyYXRp
b24sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCR2V0UmVzdWx0JiwgUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBSZWZQdHI8QXN5
bmNSZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDxJREJHZXRSZXN1bHQs
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4+OjpjcmVhdGUoY29tcGxldGlvbkNhbGxiYWNr
KTsKLQotICAgIHNlcnZlclJlcXVlc3QtPnNldEFib3J0SGFuZGxlcihbY29tcGxldGlvbkNhbGxi
YWNrXSB7Ci0gICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJHZXRSZXN1bHQoKSwgSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJV
bmtub3duIGVycm9yIG9jY3VyZWQgZ2V0dGluZyByZWNvcmQiKSk7Ci0gICAgfSk7Ci0KLSAgICB1
aW50NjRfdCByZXF1ZXN0SUQgPSBzZXJ2ZXJSZXF1ZXN0LT5yZXF1ZXN0SUQoKTsKLSAgICBBU1NF
UlQoIW1fc2VydmVyUmVxdWVzdHMuY29udGFpbnMocmVxdWVzdElEKSk7Ci0gICAgbV9zZXJ2ZXJS
ZXF1ZXN0cy5hZGQocmVxdWVzdElELCBzZXJ2ZXJSZXF1ZXN0LnJlbGVhc2UoKSk7Ci0KLSAgICBM
T0coSURCLCAiV2ViUHJvY2VzcyBnZXQgcmVxdWVzdCBJRCAlIiBQUkl1NjQsIHJlcXVlc3RJRCk7
Ci0KLSAgICBBU1NFUlQob3BlcmF0aW9uLmtleVJhbmdlKCkpOwotCi0gICAgc2VuZChNZXNzYWdl
czo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6R2V0UmVjb3JkKHJlcXVlc3RJRCwgdHJh
bnNhY3Rpb24uaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgb3BlcmF0aW9uLmluZGV4
SUQoKSwgb3BlcmF0aW9uLmtleVJhbmdlKCksIHN0YXRpY19jYXN0PGludDY0X3Q+KG9wZXJhdGlv
bi5jdXJzb3JUeXBlKCkpKSk7Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6cHV0
KElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IFB1dE9wZXJhdGlvbiYg
b3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBSZWZQ
dHI8QXN5bmNSZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDxQYXNzUmVm
UHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4+OjpjcmVhdGUoY29tcGxl
dGlvbkNhbGxiYWNrKTsKLQotICAgIHNlcnZlclJlcXVlc3QtPnNldEFib3J0SGFuZGxlcihbY29t
cGxldGlvbkNhbGxiYWNrXSB7Ci0gICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhudWxscHRyLCBJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJv
ciwgIlVua25vd24gZXJyb3Igb2NjdXJlZCBwdXR0aW5nIHJlY29yZCIpKTsKLSAgICB9KTsKLQot
ICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHNlcnZlclJlcXVlc3QtPnJlcXVlc3RJRCgpOwotICAg
IEFTU0VSVCghbV9zZXJ2ZXJSZXF1ZXN0cy5jb250YWlucyhyZXF1ZXN0SUQpKTsKLSAgICBtX3Nl
cnZlclJlcXVlc3RzLmFkZChyZXF1ZXN0SUQsIHNlcnZlclJlcXVlc3QucmVsZWFzZSgpKTsKLQot
ICAgIExPRyhJREIsICJXZWJQcm9jZXNzIHB1dCByZXF1ZXN0IElEICUiIFBSSXU2NCwgcmVxdWVz
dElEKTsKLQotICAgIEFTU0VSVChvcGVyYXRpb24udmFsdWUoKSk7Ci0KLSAgICBJUEM6OkRhdGFS
ZWZlcmVuY2UgdmFsdWUocmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4ob3BlcmF0aW9u
LnZhbHVlKCktPmRhdGEoKSksIG9wZXJhdGlvbi52YWx1ZSgpLT5zaXplKCkpOwotCi0gICAgVmVj
dG9yPFZlY3RvcjxJREJLZXlEYXRhPj4gaW5kZXhLZXlzOwotICAgIGZvciAoY29uc3QgYXV0byYg
a2V5cyA6IG9wZXJhdGlvbi5pbmRleEtleXMoKSkgewotICAgICAgICBpbmRleEtleXMuYXBwZW5k
KFZlY3RvcjxJREJLZXlEYXRhPigpKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXkgOiBr
ZXlzKQotICAgICAgICAgICAgaW5kZXhLZXlzLmxhc3QoKS5hcHBlbmQoSURCS2V5RGF0YShrZXku
Z2V0KCkpKTsKLSAgICB9Ci0KLSAgICBzZW5kKE1lc3NhZ2VzOjpEYXRhYmFzZVByb2Nlc3NJREJD
b25uZWN0aW9uOjpQdXRSZWNvcmQocmVxdWVzdElELCB0cmFuc2FjdGlvbi5pZCgpLCBvcGVyYXRp
b24ub2JqZWN0U3RvcmUoKS5pZCwgSURCS2V5RGF0YShvcGVyYXRpb24ua2V5KCkpLCB2YWx1ZSwg
b3BlcmF0aW9uLnB1dE1vZGUoKSwgb3BlcmF0aW9uLmluZGV4SURzKCksIGluZGV4S2V5cykpOwot
fQotCi12b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmRpZFB1dFJlY29yZCh1aW50NjRfdCBy
ZXF1ZXN0SUQsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmIHJlc3VsdEtleSwgdWludDMyX3Qg
ZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBMT0coSURCLCAi
V2ViUHJvY2VzcyBkaWRQdXRSZWNvcmQgcmVxdWVzdCBJRCAlIiBQUkl1NjQgIiAoZXJyb3IgLSAl
cykiLCByZXF1ZXN0SUQsIGVycm9yTWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKLQotICAgIFJlZlB0
cjxBc3luY1JlcXVlc3Q+IHNlcnZlclJlcXVlc3QgPSBtX3NlcnZlclJlcXVlc3RzLnRha2UocmVx
dWVzdElEKTsKLQotICAgIGlmICghc2VydmVyUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc2VydmVyUmVxdWVzdC0+Y29tcGxldGVSZXF1ZXN0KHJlc3VsdEtleS5pc051bGwoKSA/IG51
bGxwdHIgOiByZXN1bHRLZXkubWF5YmVDcmVhdGVJREJLZXkoKSwgZXJyb3JDb2RlID8gSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKSA6IG51bGxwdHIpOwot
fQotCi12b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmRpZEdldFJlY29yZCh1aW50NjRfdCBy
ZXF1ZXN0SUQsIGNvbnN0IFdlYkNvcmU6OklEQkdldFJlc3VsdCYgZ2V0UmVzdWx0LCB1aW50MzJf
dCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotICAgIExPRyhJREIs
ICJXZWJQcm9jZXNzIGRpZEdldFJlY29yZCByZXF1ZXN0IElEICUiIFBSSXU2NCAiIChlcnJvciAt
ICVzKSIsIHJlcXVlc3RJRCwgZXJyb3JNZXNzYWdlLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgUmVm
UHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9IG1fc2VydmVyUmVxdWVzdHMudGFrZShy
ZXF1ZXN0SUQpOwotCi0gICAgaWYgKCFzZXJ2ZXJSZXF1ZXN0KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzZXJ2ZXJSZXF1ZXN0LT5jb21wbGV0ZVJlcXVlc3QoZ2V0UmVzdWx0LCBlcnJvckNvZGUg
PyBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoZXJyb3JDb2RlLCBlcnJvck1lc3NhZ2UpIDogbnVs
bHB0cik7Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6ZGlkT3BlbkN1cnNvcih1
aW50NjRfdCByZXF1ZXN0SUQsIGludDY0X3QgY3Vyc29ySUQsIGNvbnN0IElEQktleURhdGEmIGtl
eSwgY29uc3QgSURCS2V5RGF0YSYgcHJpbWFyeUtleSwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiB2YWx1ZURhdGEsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpCi17Ci0gICAgTE9HKElEQiwgIldlYlByb2Nlc3MgZGlkT3BlbkN1cnNvciByZXF1ZXN0IElE
ICUiIFBSSXU2NCAiIChlcnJvciAtICVzKSIsIHJlcXVlc3RJRCwgZXJyb3JNZXNzYWdlLnV0Zjgo
KS5kYXRhKCkpOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9IG1f
c2VydmVyUmVxdWVzdHMudGFrZShyZXF1ZXN0SUQpOwotCi0gICAgaWYgKCFzZXJ2ZXJSZXF1ZXN0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSA9IFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKHZhbHVlRGF0YS5kYXRhKCksIHZhbHVlRGF0YS5zaXplKCkpOwot
ICAgIHNlcnZlclJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdChjdXJzb3JJRCwga2V5Lm1heWJlQ3Jl
YXRlSURCS2V5KCksIHByaW1hcnlLZXkubWF5YmVDcmVhdGVJREJLZXkoKSwgdmFsdWUucmVsZWFz
ZSgpLCBlcnJvckNvZGUgPyBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoZXJyb3JDb2RlLCBlcnJv
ck1lc3NhZ2UpIDogbnVsbHB0cik7Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6
ZGlkQWR2YW5jZUN1cnNvcih1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IElEQktleURhdGEmIGtl
eSwgY29uc3QgSURCS2V5RGF0YSYgcHJpbWFyeUtleSwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNl
JiB2YWx1ZURhdGEsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpCi17Ci0gICAgTE9HKElEQiwgIldlYlByb2Nlc3MgZGlkQWR2YW5jZUN1cnNvciByZXF1ZXN0
IElEICUiIFBSSXU2NCAiIChlcnJvciAtICVzKSIsIHJlcXVlc3RJRCwgZXJyb3JNZXNzYWdlLnV0
ZjgoKS5kYXRhKCkpOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9
IG1fc2VydmVyUmVxdWVzdHMudGFrZShyZXF1ZXN0SUQpOwotCi0gICAgaWYgKCFzZXJ2ZXJSZXF1
ZXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB2YWx1ZSA9
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHZhbHVlRGF0YS5kYXRhKCksIHZhbHVlRGF0YS5zaXplKCkp
OwotICAgIHNlcnZlclJlcXVlc3QtPmNvbXBsZXRlUmVxdWVzdChrZXkubWF5YmVDcmVhdGVJREJL
ZXkoKSwgcHJpbWFyeUtleS5tYXliZUNyZWF0ZUlEQktleSgpLCB2YWx1ZS5yZWxlYXNlKCksIGVy
cm9yQ29kZSA/IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShlcnJvckNvZGUsIGVycm9yTWVzc2Fn
ZSkgOiBudWxscHRyKTsKLX0KLQotdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpkaWRJdGVy
YXRlQ3Vyc29yKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgSURCS2V5RGF0YSYga2V5LCBjb25z
dCBJREJLZXlEYXRhJiBwcmltYXJ5S2V5LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIHZhbHVl
RGF0YSwgdWludDMyX3QgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsK
LSAgICBMT0coSURCLCAiV2ViUHJvY2VzcyBkaWRJdGVyYXRlQ3Vyc29yIHJlcXVlc3QgSUQgJSIg
UFJJdTY0ICIgKGVycm9yIC0gJXMpIiwgcmVxdWVzdElELCBlcnJvck1lc3NhZ2UudXRmOCgpLmRh
dGEoKSk7Ci0KLSAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0gbV9zZXJ2
ZXJSZXF1ZXN0cy50YWtlKHJlcXVlc3RJRCk7Ci0KLSAgICBpZiAoIXNlcnZlclJlcXVlc3QpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHZhbHVlID0gU2hhcmVk
QnVmZmVyOjpjcmVhdGUodmFsdWVEYXRhLmRhdGEoKSwgdmFsdWVEYXRhLnNpemUoKSk7Ci0gICAg
c2VydmVyUmVxdWVzdC0+Y29tcGxldGVSZXF1ZXN0KGtleS5tYXliZUNyZWF0ZUlEQktleSgpLCBw
cmltYXJ5S2V5Lm1heWJlQ3JlYXRlSURCS2V5KCksIHZhbHVlLnJlbGVhc2UoKSwgZXJyb3JDb2Rl
ID8gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKGVycm9yQ29kZSwgZXJyb3JNZXNzYWdlKSA6IG51
bGxwdHIpOwotfQotCi12b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmNvdW50KElEQlRyYW5z
YWN0aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGNvbnN0IENvdW50T3BlcmF0aW9uJiBvcGVyYXRp
b24sIHN0ZDo6ZnVuY3Rpb248dm9pZCAoaW50NjRfdCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVy
cm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykKLXsKLSAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiBz
ZXJ2ZXJSZXF1ZXN0ID0gQXN5bmNSZXF1ZXN0SW1wbDxpbnQ2NF90LCBQYXNzUmVmUHRyPElEQkRh
dGFiYXNlRXJyb3I+Pjo6Y3JlYXRlKGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KLSAgICBzZXJ2ZXJS
ZXF1ZXN0LT5zZXRBYm9ydEhhbmRsZXIoW2NvbXBsZXRpb25DYWxsYmFja10gewotICAgICAgICBj
b21wbGV0aW9uQ2FsbGJhY2soMCwgSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJVbmtub3duIGVycm9yIG9jY3VyZWQgZ2V0dGluZyBj
b3VudCIpKTsKLSAgICB9KTsKLQotICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9IHNlcnZlclJlcXVl
c3QtPnJlcXVlc3RJRCgpOwotICAgIEFTU0VSVCghbV9zZXJ2ZXJSZXF1ZXN0cy5jb250YWlucyhy
ZXF1ZXN0SUQpKTsKLSAgICBtX3NlcnZlclJlcXVlc3RzLmFkZChyZXF1ZXN0SUQsIHNlcnZlclJl
cXVlc3QucmVsZWFzZSgpKTsKLQotICAgIExPRyhJREIsICJXZWJQcm9jZXNzIGNvdW50IHJlcXVl
c3QgSUQgJSIgUFJJdTY0LCByZXF1ZXN0SUQpOwotCi0gICAgc2VuZChNZXNzYWdlczo6RGF0YWJh
c2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Q291bnQocmVxdWVzdElELCB0cmFuc2FjdGlvbi5pZCgp
LCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgpLCBvcGVyYXRpb24uaW5kZXhJRCgpLCBJREJLZXlS
YW5nZURhdGEob3BlcmF0aW9uLmtleVJhbmdlKCkpKSk7Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVy
Q29ubmVjdGlvbjo6ZGlkQ291bnQodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IGNvdW50LCB1
aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKQotewotICAgIExP
RyhJREIsICJXZWJQcm9jZXNzIGRpZENvdW50ICUiIFBSSWk2NCAiIHJlcXVlc3QgSUQgJSIgUFJJ
dTY0ICIgKGVycm9yIC0gJXMpIiwgY291bnQsIHJlcXVlc3RJRCwgZXJyb3JNZXNzYWdlLnV0Zjgo
KS5kYXRhKCkpOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9IG1f
c2VydmVyUmVxdWVzdHMudGFrZShyZXF1ZXN0SUQpOwotCi0gICAgaWYgKCFzZXJ2ZXJSZXF1ZXN0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzZXJ2ZXJSZXF1ZXN0LT5jb21wbGV0ZVJlcXVlc3Qo
Y291bnQsIGVycm9yQ29kZSA/IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShlcnJvckNvZGUsIGVy
cm9yTWVzc2FnZSkgOiBudWxscHRyKTsKLX0KLQotdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9u
OjpkZWxldGVSYW5nZShJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBjb25zdCBE
ZWxldGVSYW5nZU9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKFBhc3NS
ZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAgUmVm
UHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8UGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUVycm9yPj46OmNyZWF0ZShjb21wbGV0aW9uQ2FsbGJhY2spOwotCi0g
ICAgc2VydmVyUmVxdWVzdC0+c2V0QWJvcnRIYW5kbGVyKFtjb21wbGV0aW9uQ2FsbGJhY2tdIHsK
LSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiVW5rbm93biBlcnJvciBvY2N1cmVkIGdl
dHRpbmcgY291bnQiKSk7Ci0gICAgfSk7Ci0KLSAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSBzZXJ2
ZXJSZXF1ZXN0LT5yZXF1ZXN0SUQoKTsKLSAgICBBU1NFUlQoIW1fc2VydmVyUmVxdWVzdHMuY29u
dGFpbnMocmVxdWVzdElEKSk7Ci0gICAgbV9zZXJ2ZXJSZXF1ZXN0cy5hZGQocmVxdWVzdElELCBz
ZXJ2ZXJSZXF1ZXN0LnJlbGVhc2UoKSk7Ci0KLSAgICBMT0coSURCLCAiV2ViUHJvY2VzcyBkZWxl
dGVSYW5nZSByZXF1ZXN0IElEICUiIFBSSXU2NCwgcmVxdWVzdElEKTsKLQotICAgIHNlbmQoTWVz
c2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OkRlbGV0ZVJhbmdlKHJlcXVlc3RJ
RCwgdHJhbnNhY3Rpb24uaWQoKSwgb3BlcmF0aW9uLm9iamVjdFN0b3JlSUQoKSwgSURCS2V5UmFu
Z2VEYXRhKG9wZXJhdGlvbi5rZXlSYW5nZSgpKSkpOwotfQotCi12b2lkIFdlYklEQlNlcnZlckNv
bm5lY3Rpb246OmRpZERlbGV0ZVJhbmdlKHVpbnQ2NF90IHJlcXVlc3RJRCwgdWludDMyX3QgZXJy
b3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSkKLXsKLSAgICBMT0coSURCLCAiV2Vi
UHJvY2VzcyBkaWREZWxldGVSYW5nZSByZXF1ZXN0IElEICUiIFBSSXU2NCwgcmVxdWVzdElEKTsK
LQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHNlcnZlclJlcXVlc3QgPSBtX3NlcnZlclJlcXVl
c3RzLnRha2UocmVxdWVzdElEKTsKLQotICAgIGlmICghc2VydmVyUmVxdWVzdCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgc2VydmVyUmVxdWVzdC0+Y29tcGxldGVSZXF1ZXN0KGVycm9yQ29kZSA/
IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShlcnJvckNvZGUsIGVycm9yTWVzc2FnZSkgOiBudWxs
cHRyKTsKLX0KLQotdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpjbGVhck9iamVjdFN0b3Jl
KElEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IENsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24m
IG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkIChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJy
b3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHNl
cnZlclJlcXVlc3QgPSBBc3luY1JlcXVlc3RJbXBsPFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJv
cj4+OjpjcmVhdGUoY29tcGxldGlvbkNhbGxiYWNrKTsKLQotICAgIHNlcnZlclJlcXVlc3QtPnNl
dEFib3J0SGFuZGxlcihbY29tcGxldGlvbkNhbGxiYWNrXSB7Ci0gICAgICAgIGNvbXBsZXRpb25D
YWxsYmFjayhJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgIlVua25vd24gZXJyb3Igb2NjdXJlZCBjbGVhcmluZyBvYmplY3Qgc3RvcmUi
KSk7Ci0gICAgfSk7Ci0KLSAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSBzZXJ2ZXJSZXF1ZXN0LT5y
ZXF1ZXN0SUQoKTsKLSAgICBBU1NFUlQoIW1fc2VydmVyUmVxdWVzdHMuY29udGFpbnMocmVxdWVz
dElEKSk7Ci0gICAgbV9zZXJ2ZXJSZXF1ZXN0cy5hZGQocmVxdWVzdElELCBzZXJ2ZXJSZXF1ZXN0
LnJlbGVhc2UoKSk7Ci0KLSAgICBMT0coSURCLCAiV2ViUHJvY2VzcyBjbGVhck9iamVjdFN0b3Jl
IHJlcXVlc3QgSUQgJSIgUFJJdTY0LCByZXF1ZXN0SUQpOwotCi0gICAgc2VuZChNZXNzYWdlczo6
RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Q2xlYXJPYmplY3RTdG9yZShyZXF1ZXN0SUQs
IG9wZXJhdGlvbi50cmFuc2FjdGlvbigpLT5pZCgpLCBvcGVyYXRpb24ub2JqZWN0U3RvcmVJRCgp
KSk7Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6ZGlkQ2xlYXJPYmplY3RTdG9y
ZSh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2VzcykKLXsKLSAgICBMT0coSURCLCAiV2Vi
UHJvY2VzcyBkaWRDbGVhck9iamVjdFN0b3JlIHJlcXVlc3QgSUQgJSIgUFJJdTY0LCByZXF1ZXN0
SUQpOwotCi0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9IG1fc2VydmVy
UmVxdWVzdHMudGFrZShyZXF1ZXN0SUQpOwotCi0gICAgaWYgKCFzZXJ2ZXJSZXF1ZXN0KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBzZXJ2ZXJSZXF1ZXN0LT5jb21wbGV0ZVJlcXVlc3Qoc3VjY2Vz
cyA/IG51bGxwdHIgOiBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIlVua25vd24gZXJyb3Igb2NjdXJlZCBjbGVhcmluZyBvYmplY3Qg
c3RvcmUiKSk7Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6ZGVsZXRlT2JqZWN0
U3RvcmUoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgRGVsZXRlT2JqZWN0U3RvcmVPcGVy
YXRpb24mIG9wZXJhdGlvbiwgc3RkOjpmdW5jdGlvbjx2b2lkIChQYXNzUmVmUHRyPElEQkRhdGFi
YXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKQotewotICAgIFJlZlB0cjxBc3luY1JlcXVl
c3Q+IHNlcnZlclJlcXVlc3QgPSBBc3luY1JlcXVlc3RJbXBsPFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VFcnJvcj4+OjpjcmVhdGUoY29tcGxldGlvbkNhbGxiYWNrKTsKLQotICAgIHNlcnZlclJlcXVl
c3QtPnNldEFib3J0SGFuZGxlcihbY29tcGxldGlvbkNhbGxiYWNrXSB7Ci0gICAgICAgIGNvbXBs
ZXRpb25DYWxsYmFjayhJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRp
b246OlVua25vd25FcnJvciwgIlVua25vd24gZXJyb3Igb2NjdXJlZCBkZWxldGluZyBvYmplY3Qg
c3RvcmUiKSk7Ci0gICAgfSk7Ci0KLSAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSBzZXJ2ZXJSZXF1
ZXN0LT5yZXF1ZXN0SUQoKTsKLSAgICBBU1NFUlQoIW1fc2VydmVyUmVxdWVzdHMuY29udGFpbnMo
cmVxdWVzdElEKSk7Ci0gICAgbV9zZXJ2ZXJSZXF1ZXN0cy5hZGQocmVxdWVzdElELCBzZXJ2ZXJS
ZXF1ZXN0LnJlbGVhc2UoKSk7Ci0KLSAgICBMT0coSURCLCAiV2ViUHJvY2VzcyBkZWxldGVPYmpl
Y3RTdG9yZSByZXF1ZXN0IElEICUiIFBSSXU2NCwgcmVxdWVzdElEKTsKLQotICAgIHNlbmQoTWVz
c2FnZXM6OkRhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OkRlbGV0ZU9iamVjdFN0b3JlKHJl
cXVlc3RJRCwgb3BlcmF0aW9uLnRyYW5zYWN0aW9uKCktPmlkKCksIG9wZXJhdGlvbi5vYmplY3RT
dG9yZU1ldGFkYXRhKCkuaWQpKTsKLX0KLQotdm9pZCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpk
aWREZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2VzcykKLXsK
LSAgICBMT0coSURCLCAiV2ViUHJvY2VzcyBkaWREZWxldGVPYmplY3RTdG9yZSByZXF1ZXN0IElE
ICUiIFBSSXU2NCwgcmVxdWVzdElEKTsKLQotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHNlcnZl
clJlcXVlc3QgPSBtX3NlcnZlclJlcXVlc3RzLnRha2UocmVxdWVzdElEKTsKLQotICAgIGlmICgh
c2VydmVyUmVxdWVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2VydmVyUmVxdWVzdC0+Y29t
cGxldGVSZXF1ZXN0KHN1Y2Nlc3MgPyBudWxscHRyIDogSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJVbmtub3duIGVycm9yIG9jY3Vy
ZWQgZGVsZXRpbmcgb2JqZWN0IHN0b3JlIikpOwotfQotCi12b2lkIFdlYklEQlNlcnZlckNvbm5l
Y3Rpb246OmNoYW5nZURhdGFiYXNlVmVyc2lvbihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25z
dCBJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNpb25DaGFuZ2VPcGVyYXRpb24mIG9wZXJhdGlvbiwg
c3RkOjpmdW5jdGlvbjx2b2lkIChQYXNzUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxl
dGlvbkNhbGxiYWNrKQotewotICAgIFJlZlB0cjxBc3luY1JlcXVlc3Q+IHNlcnZlclJlcXVlc3Qg
PSBBc3luY1JlcXVlc3RJbXBsPFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4+OjpjcmVhdGUo
Y29tcGxldGlvbkNhbGxiYWNrKTsKLQotICAgIHNlcnZlclJlcXVlc3QtPnNldEFib3J0SGFuZGxl
cihbY29tcGxldGlvbkNhbGxiYWNrXSB7Ci0gICAgICAgIGNvbXBsZXRpb25DYWxsYmFjayhJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwg
IlVua25vd24gZXJyb3Igb2NjdXJlZCBjaGFuZ2luZyBkYXRhYmFzZSB2ZXJzaW9uIikpOwotICAg
IH0pOwotCi0gICAgdWludDY0X3QgcmVxdWVzdElEID0gc2VydmVyUmVxdWVzdC0+cmVxdWVzdElE
KCk7Ci0gICAgQVNTRVJUKCFtX3NlcnZlclJlcXVlc3RzLmNvbnRhaW5zKHJlcXVlc3RJRCkpOwot
ICAgIG1fc2VydmVyUmVxdWVzdHMuYWRkKHJlcXVlc3RJRCwgc2VydmVyUmVxdWVzdC5yZWxlYXNl
KCkpOwotCi0gICAgTE9HKElEQiwgIldlYlByb2Nlc3MgY2hhbmdlRGF0YWJhc2VWZXJzaW9uIHJl
cXVlc3QgSUQgJSIgUFJJdTY0LCByZXF1ZXN0SUQpOwotCi0gICAgc2VuZChNZXNzYWdlczo6RGF0
YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Q2hhbmdlRGF0YWJhc2VWZXJzaW9uKHJlcXVlc3RJ
RCwgb3BlcmF0aW9uLnRyYW5zYWN0aW9uKCktPmlkKCksIHN0YXRpY19jYXN0PHVpbnQ2NF90Pihv
cGVyYXRpb24udmVyc2lvbigpKSkpOwotfQotCi12b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246
OmRpZENoYW5nZURhdGFiYXNlVmVyc2lvbih1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vz
cykKLXsKLSAgICBMT0coSURCLCAiV2ViUHJvY2VzcyBkaWRDaGFuZ2VEYXRhYmFzZVZlcnNpb24g
cmVxdWVzdCBJRCAlIiBQUkl1NjQsIHJlcXVlc3RJRCk7Ci0KLSAgICBSZWZQdHI8QXN5bmNSZXF1
ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0gbV9zZXJ2ZXJSZXF1ZXN0cy50YWtlKHJlcXVlc3RJRCk7Ci0K
LSAgICBpZiAoIXNlcnZlclJlcXVlc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNlcnZlclJl
cXVlc3QtPmNvbXBsZXRlUmVxdWVzdChzdWNjZXNzID8gbnVsbHB0ciA6IElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiVW5rbm93biBl
cnJvciBvY2N1cmVkIGNoYW5naW5nIGRhdGFiYXNlIHZlcnNpb24iKSk7Ci19Ci0KLXZvaWQgV2Vi
SURCU2VydmVyQ29ubmVjdGlvbjo6b3BlbkN1cnNvcihJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBj
b25zdCBPcGVuQ3Vyc29yT3BlcmF0aW9uJiBvcGVyYXRpb24sIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
aW50NjRfdCwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQ
dHI8U2hhcmVkQnVmZmVyPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRp
b25DYWxsYmFjaykKLXsKLSAgICBSZWZQdHI8QXN5bmNSZXF1ZXN0PiBzZXJ2ZXJSZXF1ZXN0ID0g
QXN5bmNSZXF1ZXN0SW1wbDxpbnQ2NF90LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8
SURCS2V5PiwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNl
RXJyb3I+Pjo6Y3JlYXRlKGNvbXBsZXRpb25DYWxsYmFjayk7Ci0KLSAgICBzZXJ2ZXJSZXF1ZXN0
LT5zZXRBYm9ydEhhbmRsZXIoW2NvbXBsZXRpb25DYWxsYmFja10gewotICAgICAgICBjb21wbGV0
aW9uQ2FsbGJhY2soMCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0ciwgSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJVbmtub3duIGVy
cm9yIG9jY3VyZWQgb3BlbmluZyBkYXRhYmFzZSBjdXJzb3IiKSk7Ci0gICAgfSk7Ci0KLSAgICB1
aW50NjRfdCByZXF1ZXN0SUQgPSBzZXJ2ZXJSZXF1ZXN0LT5yZXF1ZXN0SUQoKTsKLSAgICBBU1NF
UlQoIW1fc2VydmVyUmVxdWVzdHMuY29udGFpbnMocmVxdWVzdElEKSk7Ci0gICAgbV9zZXJ2ZXJS
ZXF1ZXN0cy5hZGQocmVxdWVzdElELCBzZXJ2ZXJSZXF1ZXN0LnJlbGVhc2UoKSk7Ci0KLSAgICBM
T0coSURCLCAiV2ViUHJvY2VzcyBvcGVuQ3Vyc29yIHJlcXVlc3QgSUQgJSIgUFJJdTY0LCByZXF1
ZXN0SUQpOwotCi0gICAgc2VuZChNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlv
bjo6T3BlbkN1cnNvcihyZXF1ZXN0SUQsIG9wZXJhdGlvbi50cmFuc2FjdGlvbklEKCksIG9wZXJh
dGlvbi5vYmplY3RTdG9yZUlEKCksIG9wZXJhdGlvbi5pbmRleElEKCksIHN0YXRpY19jYXN0PGlu
dDY0X3Q+KG9wZXJhdGlvbi5kaXJlY3Rpb24oKSksIHN0YXRpY19jYXN0PGludDY0X3Q+KG9wZXJh
dGlvbi5jdXJzb3JUeXBlKCkpLCBzdGF0aWNfY2FzdDxpbnQ2NF90PihvcGVyYXRpb24udGFza1R5
cGUoKSksIG9wZXJhdGlvbi5rZXlSYW5nZSgpKSk7Ci19Ci0KLXZvaWQgV2ViSURCU2VydmVyQ29u
bmVjdGlvbjo6Y3Vyc29yQWR2YW5jZShJREJDdXJzb3JCYWNrZW5kJiwgY29uc3QgQ3Vyc29yQWR2
YW5jZU9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKFBhc3NSZWZQdHI8
SURCS2V5PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spCi17Ci0gICAg
UmVmUHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9IEFzeW5jUmVxdWVzdEltcGw8UGFz
c1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPj46OmNyZWF0ZShjb21wbGV0aW9uQ2Fs
bGJhY2spOwotCi0gICAgc2VydmVyUmVxdWVzdC0+c2V0QWJvcnRIYW5kbGVyKFtjb21wbGV0aW9u
Q2FsbGJhY2tdIHsKLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKG51bGxwdHIsIG51bGxwdHIs
IG51bGxwdHIsIElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yLCAiVW5rbm93biBlcnJvciBvY2N1cmVkIGFkdmFuY2luZyBkYXRhYmFzZSBj
dXJzb3IiKSk7Ci0gICAgfSk7Ci0KLSAgICB1aW50NjRfdCByZXF1ZXN0SUQgPSBzZXJ2ZXJSZXF1
ZXN0LT5yZXF1ZXN0SUQoKTsKLSAgICBBU1NFUlQoIW1fc2VydmVyUmVxdWVzdHMuY29udGFpbnMo
cmVxdWVzdElEKSk7Ci0gICAgbV9zZXJ2ZXJSZXF1ZXN0cy5hZGQocmVxdWVzdElELCBzZXJ2ZXJS
ZXF1ZXN0LnJlbGVhc2UoKSk7Ci0KLSAgICBMT0coSURCLCAiV2ViUHJvY2VzcyBjdXJzb3JBZHZh
bmNlIHJlcXVlc3QgSUQgJSIgUFJJdTY0LCByZXF1ZXN0SUQpOwotCi0gICAgc2VuZChNZXNzYWdl
czo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Q3Vyc29yQWR2YW5jZShyZXF1ZXN0SUQs
IG9wZXJhdGlvbi5jdXJzb3JJRCgpLCBvcGVyYXRpb24uY291bnQoKSkpOwotfQotCi12b2lkIFdl
YklEQlNlcnZlckNvbm5lY3Rpb246OmN1cnNvckl0ZXJhdGUoSURCQ3Vyc29yQmFja2VuZCYsIGNv
bnN0IEN1cnNvckl0ZXJhdGlvbk9wZXJhdGlvbiYgb3BlcmF0aW9uLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKFBhc3NSZWZQdHI8SURCS2V5PiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2Fs
bGJhY2spCi17Ci0gICAgUmVmUHRyPEFzeW5jUmVxdWVzdD4gc2VydmVyUmVxdWVzdCA9IEFzeW5j
UmVxdWVzdEltcGw8UGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRyPElEQktleT4sIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPj46OmNyZWF0
ZShjb21wbGV0aW9uQ2FsbGJhY2spOwotCi0gICAgc2VydmVyUmVxdWVzdC0+c2V0QWJvcnRIYW5k
bGVyKFtjb21wbGV0aW9uQ2FsbGJhY2tdIHsKLSAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrKG51
bGxwdHIsIG51bGxwdHIsIG51bGxwdHIsIElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiVW5rbm93biBlcnJvciBvY2N1cmVkIGl0ZXJh
dGluZyBkYXRhYmFzZSBjdXJzb3IiKSk7Ci0gICAgfSk7Ci0KLSAgICB1aW50NjRfdCByZXF1ZXN0
SUQgPSBzZXJ2ZXJSZXF1ZXN0LT5yZXF1ZXN0SUQoKTsKLSAgICBBU1NFUlQoIW1fc2VydmVyUmVx
dWVzdHMuY29udGFpbnMocmVxdWVzdElEKSk7Ci0gICAgbV9zZXJ2ZXJSZXF1ZXN0cy5hZGQocmVx
dWVzdElELCBzZXJ2ZXJSZXF1ZXN0LnJlbGVhc2UoKSk7Ci0KLSAgICBMT0coSURCLCAiV2ViUHJv
Y2VzcyBjdXJzb3JJdGVyYXRlIHJlcXVlc3QgSUQgJSIgUFJJdTY0LCByZXF1ZXN0SUQpOwotCi0g
ICAgc2VuZChNZXNzYWdlczo6RGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6Q3Vyc29ySXRl
cmF0ZShyZXF1ZXN0SUQsIG9wZXJhdGlvbi5jdXJzb3JJRCgpLCBvcGVyYXRpb24ua2V5KCkpKTsK
LX0KLQotSVBDOjpDb25uZWN0aW9uKiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjptZXNzYWdlU2Vu
ZGVyQ29ubmVjdGlvbigpCi17Ci0gICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndl
YlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYm
IEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZl
ckNvbm5lY3Rpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM2NmY3OC4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIv
V2ViSURCU2VydmVyQ29ubmVjdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLSNpZm5k
ZWYgV2ViSURCU2VydmVyQ29ubmVjdGlvbl9oCi0jZGVmaW5lIFdlYklEQlNlcnZlckNvbm5lY3Rp
b25faAotCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIEVOQUJMRShEQVRBQkFTRV9Q
Uk9DRVNTKQotCi0jaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
SURCRGF0YWJhc2VNZXRhZGF0YS5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSURCU2VydmVyQ29ubmVj
dGlvbi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJREJLZXlEYXRhOwotY2xhc3Mg
U2VjdXJpdHlPcmlnaW47Ci19Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1jbGFzcyBBc3luY1Jl
cXVlc3Q7Ci0KLWNsYXNzIFdlYklEQlNlcnZlckNvbm5lY3Rpb24gZmluYWwgOiBwdWJsaWMgV2Vi
Q29yZTo6SURCU2VydmVyQ29ubmVjdGlvbiwgcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViSURCU2VydmVyQ29ubmVjdGlvbj4gY3Jl
YXRlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbiYgb3BlbmluZ09yaWdpbiwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIG1haW5G
cmFtZU9yaWdpbik7Ci0KLSAgICB2aXJ0dWFsIH5XZWJJREJTZXJ2ZXJDb25uZWN0aW9uKCk7Ci0K
LSAgICB2aXJ0dWFsIGJvb2wgaXNDbG9zZWQoKSBvdmVycmlkZTsKLQotICAgIHR5cGVkZWYgc3Rk
OjpmdW5jdGlvbjx2b2lkIChib29sIHN1Y2Nlc3MpPiBCb29sQ2FsbGJhY2tGdW5jdGlvbjsKLQot
ICAgIC8vIEZhY3RvcnktbGV2ZWwgb3BlcmF0aW9ucwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVE
YXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3ND
YWxsYmFjaykgb3ZlcnJpZGU7Ci0KLSAgICAvLyBEYXRhYmFzZS1sZXZlbCBvcGVyYXRpb25zCi0g
ICAgdmlydHVhbCB2b2lkIGdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YShHZXRJREJE
YXRhYmFzZU1ldGFkYXRhRnVuY3Rpb24pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjbG9z
ZSgpIG92ZXJyaWRlOwotCi0gICAgLy8gVHJhbnNhY3Rpb24tbGV2ZWwgb3BlcmF0aW9ucwotICAg
IHZpcnR1YWwgdm9pZCBvcGVuVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBjb25z
dCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgV2ViQ29yZTo6SW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjaykgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2Fj
dGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25DYWxsYmFjaykgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNvbW1pdFRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rp
b25JRCwgQm9vbENhbGxiYWNrRnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKSBvdmVycmlkZTsKLSAg
ICB2aXJ0dWFsIHZvaWQgcmVzZXRUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkNhbGxiYWNrKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIGJvb2wgcmVzZXRUcmFuc2FjdGlvblN5bmMoaW50NjRfdCB0cmFuc2FjdGlvbklEKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2tUcmFuc2FjdGlvbihpbnQ2NF90IHRy
YW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkNhbGxiYWNrKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgcm9sbGJhY2tUcmFuc2FjdGlvblN5bmMoaW50NjRf
dCB0cmFuc2FjdGlvbklEKSBvdmVycmlkZTsKLQotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtl
eXMoaW50NjRfdCB0cmFuc2FjdGlvbklELCBpbnQ2NF90IGRhdGFiYXNlSUQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJRCwgY29uc3QgV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIFdlYkNv
cmU6OklEQktleSYgcHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3QsIDE+JiBpbmRleElE
cywgY29uc3QgVmVjdG9yPFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6SURCS2V5Pj4sIDE+JiBpbmRl
eEtleXMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFz
ZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgb3ZlcnJpZGU7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlT2JqZWN0U3RvcmUoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29u
c3QgV2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2Fs
bGJhY2spIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbmRleChXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBXZWJDb3JlOjpDcmVhdGVJbmRleE9wZXJhdGlv
biYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUVy
cm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRl
bGV0ZUluZGV4KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNvbnN0IFdlYkNvcmU6
OkRlbGV0ZUluZGV4T3BlcmF0aW9uJiwgc3RkOjpmdW5jdGlvbjx2b2lkIChQYXNzUmVmUHRyPFdl
YkNvcmU6OklEQkRhdGFiYXNlRXJyb3I+KT4gY29tcGxldGlvbkNhbGxiYWNrKSBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgZ2V0KFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZCYsIGNv
bnN0IFdlYkNvcmU6OkdldE9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgV2Vi
Q29yZTo6SURCR2V0UmVzdWx0JiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUVycm9y
Pik+IGNvbXBsZXRpb25DYWxsYmFjaykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHB1dChX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBXZWJDb3JlOjpQdXRPcGVyYXRp
b24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykg
b3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kJiwgY29uc3QgV2ViQ29yZTo6T3BlbkN1cnNvck9wZXJhdGlvbiYsIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoaW50NjRfdCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+LCBQYXNz
UmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
PiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxs
YmFjaykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNvdW50KFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZCYsIGNvbnN0IFdlYkNvcmU6OkNvdW50T3BlcmF0aW9uJiwgc3RkOjpmdW5j
dGlvbjx2b2lkIChpbnQ2NF90LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlRXJyb3I+
KT4gY29tcGxldGlvbkNhbGxiYWNrKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
UmFuZ2UoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kJiwgY29uc3QgV2ViQ29yZTo6RGVs
ZXRlUmFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZCYsIGNvbnN0IFdlYkNvcmU6OkNsZWFyT2JqZWN0U3RvcmVPcGVyYXRpb24mLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VFcnJvcj4pPiBjb21w
bGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQmLCBjb25zdCBXZWJDb3JlOjpEZWxl
dGVPYmplY3RTdG9yZU9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoUGFzc1JlZlB0cjxX
ZWJDb3JlOjpJREJEYXRhYmFzZUVycm9yPik+IGNvbXBsZXRpb25DYWxsYmFjaykgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIGNoYW5nZURhdGFiYXNlVmVyc2lvbihXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmQmLCBjb25zdCBXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmQ6OlZlcnNp
b25DaGFuZ2VPcGVyYXRpb24mLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCRGF0YWJhc2VFcnJvcj4pPiBjb21wbGV0aW9uQ2FsbGJhY2spIG92ZXJyaWRlOwotCi0g
ICAgLy8gQ3Vyc29yLWxldmVsIG9wZXJhdGlvbnMKLSAgICB2aXJ0dWFsIHZvaWQgY3Vyc29yQWR2
YW5jZShXZWJDb3JlOjpJREJDdXJzb3JCYWNrZW5kJiwgY29uc3QgV2ViQ29yZTo6Q3Vyc29yQWR2
YW5jZU9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJLZXk+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkQnVmZmVyPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUVycm9yPik+IGNv
bXBsZXRpb25DYWxsYmFjaykgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnNvckl0ZXJh
dGUoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZCYsIGNvbnN0IFdlYkNvcmU6OkN1cnNvckl0ZXJh
dGlvbk9wZXJhdGlvbiYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJLZXk+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkQnVmZmVyPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUVycm9yPik+IGNv
bXBsZXRpb25DYWxsYmFjaykgb3ZlcnJpZGU7Ci0KLSAgICAvLyBNZXNzYWdlIGhhbmRsZXJzLgot
ICAgIHZvaWQgZGlkUmVjZWl2ZVdlYklEQlNlcnZlckNvbm5lY3Rpb25NZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6TWVzc2FnZURlY29kZXImKTsKLQotICAgIC8vIElQQzo6TWVzc2FnZVNl
bmRlcgotICAgIHZpcnR1YWwgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBv
dmVycmlkZSB7IHJldHVybiBtX3NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyOyB9Ci0KLXByaXZh
dGU6Ci0gICAgV2ViSURCU2VydmVyQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFt
ZSwgY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4mIG9wZW5pbmdPcmlnaW4sIGNvbnN0IFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luJiBtYWluRnJhbWVPcmlnaW4pOwotCi0gICAgLy8gSVBDOjpN
ZXNzYWdlU2VuZGVyCi0gICAgdmlydHVhbCBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJD
b25uZWN0aW9uKCkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIGRpZEdldE9yRXN0YWJsaXNoSURCRGF0
YWJhc2VNZXRhZGF0YSh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2VzcywgY29uc3QgV2Vi
Q29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSYpOwotICAgIHZvaWQgZGlkRGVsZXRlRGF0YWJhc2Uo
dWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MpOwotICAgIHZvaWQgZGlkT3BlblRyYW5z
YWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKTsKLSAgICB2b2lkIGRpZEJl
Z2luVHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3MpOwotICAgIHZv
aWQgZGlkQ29tbWl0VHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBib29sIHN1Y2Nlc3Mp
OwotICAgIHZvaWQgZGlkUmVzZXRUcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wg
c3VjY2Vzcyk7Ci0gICAgdm9pZCBkaWRSb2xsYmFja1RyYW5zYWN0aW9uKHVpbnQ2NF90IHJlcXVl
c3RJRCwgYm9vbCBzdWNjZXNzKTsKLSAgICB2b2lkIGRpZENoYW5nZURhdGFiYXNlVmVyc2lvbih1
aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vzcyk7Ci0gICAgdm9pZCBkaWRDcmVhdGVPYmpl
Y3RTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vzcyk7Ci0gICAgdm9pZCBkaWRE
ZWxldGVPYmplY3RTdG9yZSh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vzcyk7Ci0gICAg
dm9pZCBkaWRDbGVhck9iamVjdFN0b3JlKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNz
KTsKLSAgICB2b2lkIGRpZENyZWF0ZUluZGV4KHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNj
ZXNzKTsKLSAgICB2b2lkIGRpZERlbGV0ZUluZGV4KHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBz
dWNjZXNzKTsKLSAgICB2b2lkIGRpZFB1dFJlY29yZCh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0
IFdlYkNvcmU6OklEQktleURhdGEmLCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYg
ZXJyb3JNZXNzYWdlKTsKLSAgICB2b2lkIGRpZEdldFJlY29yZCh1aW50NjRfdCByZXF1ZXN0SUQs
IGNvbnN0IFdlYkNvcmU6OklEQkdldFJlc3VsdCYsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3Qg
U3RyaW5nJiBlcnJvck1lc3NhZ2UpOwotICAgIHZvaWQgZGlkT3BlbkN1cnNvcih1aW50NjRfdCBy
ZXF1ZXN0SUQsIGludDY0X3QgY3Vyc29ySUQsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmLCBj
b25zdCBXZWJDb3JlOjpJREJLZXlEYXRhJiwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgdWlu
dDMyX3QgZXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0gICAgdm9pZCBk
aWRBZHZhbmNlQ3Vyc29yKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgV2ViQ29yZTo6SURCS2V5
RGF0YSYsIGNvbnN0IFdlYkNvcmU6OklEQktleURhdGEmLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmLCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLSAg
ICB2b2lkIGRpZEl0ZXJhdGVDdXJzb3IodWludDY0X3QgcmVxdWVzdElELCBjb25zdCBXZWJDb3Jl
OjpJREJLZXlEYXRhJiwgY29uc3QgV2ViQ29yZTo6SURCS2V5RGF0YSYsIGNvbnN0IElQQzo6RGF0
YVJlZmVyZW5jZSYsIHVpbnQzMl90IGVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpOwotICAgIHZvaWQgZGlkQ291bnQodWludDY0X3QgcmVxdWVzdElELCBpbnQ2NF90IGNvdW50
LCB1aW50MzJfdCBlcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKLSAgICB2
b2lkIGRpZERlbGV0ZVJhbmdlKHVpbnQ2NF90IHJlcXVlc3RJRCwgdWludDMyX3QgZXJyb3JDb2Rl
LCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7Ci0KLSAgICB1aW50NjRfdCBtX3NlcnZlckNv
bm5lY3Rpb25JZGVudGlmaWVyOwotCi0gICAgU3RyaW5nIG1fZGF0YWJhc2VOYW1lOwotICAgIFJl
ZjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4gbV9vcGVuaW5nT3JpZ2luOwotICAgIFJlZjxXZWJD
b3JlOjpTZWN1cml0eU9yaWdpbj4gbV9tYWluRnJhbWVPcmlnaW47Ci0KLSAgICBIYXNoTWFwPHVp
bnQ2NF90LCBSZWZQdHI8QXN5bmNSZXF1ZXN0Pj4gbV9zZXJ2ZXJSZXF1ZXN0czsKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
ICYmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQotI2VuZGlmIC8vIFdlYklEQlNlcnZlckNvbm5l
Y3Rpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMv
SW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlv
bi5tZXNzYWdlcy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyNGRjNi4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIv
V2ViSURCU2VydmVyQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDUy
ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0jIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0jIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
LSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKLSMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKLSMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKLQotbWVz
c2FnZXMgLT4gV2ViSURCU2VydmVyQ29ubmVjdGlvbiBMZWdhY3lSZWNlaXZlciB7Ci0gICAgRGlk
R2V0T3JFc3RhYmxpc2hJREJEYXRhYmFzZU1ldGFkYXRhKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9v
bCBzdWNjZXNzLCBzdHJ1Y3QgV2ViQ29yZTo6SURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSkK
LSAgICBEaWREZWxldGVEYXRhYmFzZSh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2VzcykK
LQotICAgIERpZE9wZW5UcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2Vz
cykKLSAgICBEaWRCZWdpblRyYW5zYWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNj
ZXNzKQotICAgIERpZENvbW1pdFRyYW5zYWN0aW9uKHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBz
dWNjZXNzKQotICAgIERpZFJlc2V0VHJhbnNhY3Rpb24odWludDY0X3QgcmVxdWVzdElELCBib29s
IHN1Y2Nlc3MpCi0gICAgRGlkUm9sbGJhY2tUcmFuc2FjdGlvbih1aW50NjRfdCByZXF1ZXN0SUQs
IGJvb2wgc3VjY2VzcykKLQotICAgIERpZENoYW5nZURhdGFiYXNlVmVyc2lvbih1aW50NjRfdCBy
ZXF1ZXN0SUQsIGJvb2wgc3VjY2VzcykKLSAgICBEaWRDcmVhdGVPYmplY3RTdG9yZSh1aW50NjRf
dCByZXF1ZXN0SUQsIGJvb2wgc3VjY2VzcykKLSAgICBEaWREZWxldGVPYmplY3RTdG9yZSh1aW50
NjRfdCByZXF1ZXN0SUQsIGJvb2wgc3VjY2VzcykKLSAgICBEaWRDbGVhck9iamVjdFN0b3JlKHVp
bnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKQotICAgIAotICAgIERpZENyZWF0ZUluZGV4
KHVpbnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKQotICAgIERpZERlbGV0ZUluZGV4KHVp
bnQ2NF90IHJlcXVlc3RJRCwgYm9vbCBzdWNjZXNzKQotCi0gICAgRGlkUHV0UmVjb3JkKHVpbnQ2
NF90IHJlcXVlc3RJRCwgV2ViQ29yZTo6SURCS2V5RGF0YSByZXN1bHRLZXksIHVpbnQzMl90IGVy
cm9yQ29kZSwgU3RyaW5nIGVycm9yTWVzc2FnZSkKLSAgICBEaWRHZXRSZWNvcmQodWludDY0X3Qg
cmVxdWVzdElELCBXZWJDb3JlOjpJREJHZXRSZXN1bHQgZ2V0UmVzdWx0LCB1aW50MzJfdCBlcnJv
ckNvZGUsIFN0cmluZyBlcnJvck1lc3NhZ2UpCi0gICAgRGlkT3BlbkN1cnNvcih1aW50NjRfdCBy
ZXF1ZXN0SUQsIGludDY0X3QgY3Vyc29ySUQsIFdlYkNvcmU6OklEQktleURhdGEga2V5LCBXZWJD
b3JlOjpJREJLZXlEYXRhIHByaW1hcnlLZXksIElQQzo6RGF0YVJlZmVyZW5jZSB2YWx1ZSwgdWlu
dDMyX3QgZXJyb3JDb2RlLCBTdHJpbmcgZXJyb3JNZXNzYWdlKQotICAgIERpZEFkdmFuY2VDdXJz
b3IodWludDY0X3QgcmVxdWVzdElELCBXZWJDb3JlOjpJREJLZXlEYXRhIGtleSwgV2ViQ29yZTo6
SURCS2V5RGF0YSBwcmltYXJ5S2V5LCBJUEM6OkRhdGFSZWZlcmVuY2UgdmFsdWUsIHVpbnQzMl90
IGVycm9yQ29kZSwgU3RyaW5nIGVycm9yTWVzc2FnZSkKLSAgICBEaWRJdGVyYXRlQ3Vyc29yKHVp
bnQ2NF90IHJlcXVlc3RJRCwgV2ViQ29yZTo6SURCS2V5RGF0YSBrZXksIFdlYkNvcmU6OklEQktl
eURhdGEgcHJpbWFyeUtleSwgSVBDOjpEYXRhUmVmZXJlbmNlIHZhbHVlLCB1aW50MzJfdCBlcnJv
ckNvZGUsIFN0cmluZyBlcnJvck1lc3NhZ2UpCi0gICAgRGlkQ291bnQodWludDY0X3QgcmVxdWVz
dElELCBpbnQ2NF90IGNvdW50LCB1aW50MzJfdCBlcnJvckNvZGUsIFN0cmluZyBlcnJvck1lc3Nh
Z2UpCi0gICAgRGlkRGVsZXRlUmFuZ2UodWludDY0X3QgcmVxdWVzdElELCB1aW50MzJfdCBlcnJv
ckNvZGUsIFN0cmluZyBlcnJvck1lc3NhZ2UpCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkgJiYgRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL1dlYkRhdGFiYXNlUHJvdmlkZXIu
Y3BwCmluZGV4IGVmYmIxZDcuLmFlNTU5MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvRGF0YWJhc2VzL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwCkBAIC0y
Niw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViRGF0YWJhc2VQ
cm92aWRlci5oIgogCi0jaW5jbHVkZSAiV2ViSURCRmFjdG9yeUJhY2tlbmQuaCIKICNpbmNsdWRl
ICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9u
LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9uSUQuaD4KQEAgLTg0LDE0ICs4Myw2IEBAIFdl
YkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBXZWJEYXRhYmFzZVByb3Zp
ZGVyOjppZGJDb25uZWN0aW9uVG9TCiAgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LndlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbigpLT5pZGJDb25uZWN0aW9uVG9TZXJ2ZXJG
b3JTZXNzaW9uKHNlc3Npb25JRCkuY29yZUNvbm5lY3Rpb25Ub1NlcnZlcigpOwogfQogCi1SZWZQ
dHI8V2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IFdlYkRhdGFiYXNlUHJvdmlk
ZXI6OmNyZWF0ZUlEQkZhY3RvcnlCYWNrZW5kKCkKLXsKLSNpZiBFTkFCTEUoREFUQUJBU0VfUFJP
Q0VTUykKLSAgICByZXR1cm4gV2ViSURCRmFjdG9yeUJhY2tlbmQ6OmNyZWF0ZSgpOwotI2Vsc2UK
LSAgICByZXR1cm4gbnVsbHB0cjsKLSNlbmRpZgotfQogI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL1dlYkRhdGFiYXNlUHJvdmlkZXIu
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL1dlYkRhdGFiYXNlUHJvdmlk
ZXIuaAppbmRleCA1Njc3ZWY2Li5mZTlmZmFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0RhdGFiYXNlcy9XZWJEYXRhYmFzZVByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2ViRGF0YWJhc2VQcm92aWRlci5oCkBAIC0zOCw3
ICszOCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJEYXRhYmFzZVByb3ZpZGVyKCk7CiAK
ICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNN
b2Rlcm5JREIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBX
ZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgaWRiQ29ubmVjdGlvblRv
U2VydmVyRm9yU2Vzc2lvbihjb25zdCBXZWJDb3JlOjpTZXNzaW9uSUQmKSBvdmVycmlkZSBmaW5h
bDsKICNlbmRpZgogCkBAIC00Niw3ICs0NSw2IEBAIHByaXZhdGU6CiAgICAgZXhwbGljaXQgV2Vi
RGF0YWJhc2VQcm92aWRlcih1aW50NjRfdCBpZGVudGlmaWVyKTsKIAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotICAgIHZpcnR1YWwgUmVmUHRyPFdlYkNvcmU6OklEQkZhY3RvcnlCYWNr
ZW5kSW50ZXJmYWNlPiBjcmVhdGVJREJGYWN0b3J5QmFja2VuZCgpIG92ZXJyaWRlOwogICAgIEhh
c2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI+PiBtX2lk
YkVwaGVtZXJhbENvbm5lY3Rpb25NYXA7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL1dlYlRvRGF0YWJhc2VQ
cm9jZXNzQ29ubmVjdGlvbi5jcHAKaW5kZXggNWVlYjM3MS4uNTMxMDFmYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2ViVG9EYXRhYmFzZVByb2Nlc3ND
b25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9X
ZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC0yOSw4ICsyOSw2IEBACiAKICNp
bmNsdWRlICJEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlcy5oIgogI2luY2x1
ZGUgIldlYklEQkNvbm5lY3Rpb25Ub1NlcnZlck1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViSURC
U2VydmVyQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIldlYklEQlNlcnZlckNvbm5lY3Rpb25NZXNz
YWdlcy5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5o
PgogCkBAIC01OSwxMyArNTcsNiBAQCB2b2lkIFdlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlv
bjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aQogICAgICAgICAg
ICAgaXRlcmF0b3ItPnZhbHVlLT5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNl
aXZlck5hbWUoKSA9PSBNZXNzYWdlczo6V2ViSURCU2VydmVyQ29ubmVjdGlvbjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIEhhc2hNYXA8dWludDY0X3QsIFdlYklEQlNlcnZlckNv
bm5lY3Rpb24qPjo6aXRlcmF0b3IgY29ubmVjdGlvbkl0ZXJhdG9yID0gbV93ZWJJREJTZXJ2ZXJD
b25uZWN0aW9ucy5maW5kKGRlY29kZXIuZGVzdGluYXRpb25JRCgpKTsKLSAgICAgICAgaWYgKGNv
bm5lY3Rpb25JdGVyYXRvciAhPSBtX3dlYklEQlNlcnZlckNvbm5lY3Rpb25zLmVuZCgpKQotICAg
ICAgICAgICAgY29ubmVjdGlvbkl0ZXJhdG9yLT52YWx1ZS0+ZGlkUmVjZWl2ZVdlYklEQlNlcnZl
ckNvbm5lY3Rpb25NZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQogI2VuZGlmCiAgICAgCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC04MSwy
MiArNzIsNiBAQCB2b2lkIFdlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsCiB9CiAKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKLXZvaWQgV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uOjpyZWdpc3Rl
cldlYklEQlNlcnZlckNvbm5lY3Rpb24oV2ViSURCU2VydmVyQ29ubmVjdGlvbiYgY29ubmVjdGlv
bikKLXsKLSAgICBBU1NFUlQoIW1fd2ViSURCU2VydmVyQ29ubmVjdGlvbnMuY29udGFpbnMoY29u
bmVjdGlvbi5tZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpKSk7Ci0gICAgbV93ZWJJREJTZXJ2
ZXJDb25uZWN0aW9ucy5zZXQoY29ubmVjdGlvbi5tZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgp
LCAmY29ubmVjdGlvbik7Ci0KLX0KLQotdm9pZCBXZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rp
b246OnJlbW92ZVdlYklEQlNlcnZlckNvbm5lY3Rpb24oV2ViSURCU2VydmVyQ29ubmVjdGlvbiYg
Y29ubmVjdGlvbikKLXsKLSAgICBBU1NFUlQobV93ZWJJREJTZXJ2ZXJDb25uZWN0aW9ucy5jb250
YWlucyhjb25uZWN0aW9uLm1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkpKTsKLQotICAgIHNl
bmQoTWVzc2FnZXM6OkRhdGFiYXNlVG9XZWJQcm9jZXNzQ29ubmVjdGlvbjo6UmVtb3ZlRGF0YWJh
c2VQcm9jZXNzSURCQ29ubmVjdGlvbihjb25uZWN0aW9uLm1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkpKTsKLQotICAgIG1fd2ViSURCU2VydmVyQ29ubmVjdGlvbnMucmVtb3ZlKGNvbm5lY3Rp
b24ubWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSk7Ci19Ci0KIFdlYklEQkNvbm5lY3Rpb25U
b1NlcnZlciYgV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uOjppZGJDb25uZWN0aW9uVG9T
ZXJ2ZXJGb3JTZXNzaW9uKGNvbnN0IFNlc3Npb25JRCYgc2Vzc2lvbklEKQogewogICAgIGF1dG8g
cmVzdWx0ID0gbV93ZWJJREJDb25uZWN0aW9ucy5hZGQoc2Vzc2lvbklELnNlc3Npb25JRCgpLCBu
dWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2Vz
L1dlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9EYXRhYmFzZXMvV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uLmgKaW5kZXggZTRh
NTRhNi4uYmQwNzQyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRh
YmFzZXMvV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uLmgK
QEAgLTQwLDkgKzQwLDYgQEAgY2xhc3MgU2Vzc2lvbklEOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotY2xhc3MgV2ViSURCU2VydmVyQ29ubmVjdGlvbjsKLWNsYXNzIFdlYlByb2Nlc3NJREJEYXRh
YmFzZUJhY2tlbmQ7Ci0KIGNsYXNzIFdlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbiA6IHB1
YmxpYyBSZWZDb3VudGVkPFdlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbj4sIHB1YmxpYyBJ
UEM6OkNvbm5lY3Rpb246OkNsaWVudCwgcHVibGljIElQQzo6TWVzc2FnZVNlbmRlciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxXZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24+IGNyZWF0
ZShJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIpCkBAIC01
NCw5ICs1MSw2IEBAIHB1YmxpYzoKICAgICBJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQotICAgIHZvaWQgcmVnaXN0ZXJXZWJJREJTZXJ2ZXJDb25uZWN0aW9uKFdlYklE
QlNlcnZlckNvbm5lY3Rpb24mKTsKLSAgICB2b2lkIHJlbW92ZVdlYklEQlNlcnZlckNvbm5lY3Rp
b24oV2ViSURCU2VydmVyQ29ubmVjdGlvbiYpOwotCiAgICAgV2ViSURCQ29ubmVjdGlvblRvU2Vy
dmVyJiBpZGJDb25uZWN0aW9uVG9TZXJ2ZXJGb3JTZXNzaW9uKGNvbnN0IFdlYkNvcmU6OlNlc3Np
b25JRCYpOwogI2VuZGlmCiAKQEAgLTc3LDggKzcxLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uKj4gbV93
ZWJJREJTZXJ2ZXJDb25uZWN0aW9uczsKLQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxX
ZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXI+PiBtX3dlYklEQkNvbm5lY3Rpb25zOwogI2VuZGlmCiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IDUyMDlhNGQuLjJkZjQ1
YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKQEAgLTQwLDcgKzQwLDYg
QEAKICNpbmNsdWRlICJXZWJFcnJvcnMuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1
ZGUgIldlYkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViSURCRmFjdG9yeUJhY2tl
bmQuaCIKICNpbmNsdWRlICJXZWJMb2FkZXJTdHJhdGVneS5oIgogI2luY2x1ZGUgIldlYlBhZ2Uu
aCIKICNpbmNsdWRlICJXZWJQYXN0ZWJvYXJkT3ZlcnJpZGVzLmgiCkBAIC01MCw3ICs0OSw2IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTG9hZGVy
U3RyYXRlZ3kuaD4KICNpbmNsdWRlIDxXZWJDb3JlL01haW5GcmFtZS5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvTmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>